技術資料

php -rの使い方:PowerShellでPHPを手軽に試す

作成日:2026.11.04

PHPファイルを作らずにコードを実行できる「php -r」の基本的な使い方を紹介します。PowerShellで変数や関数を試す例と、引用符による変数展開でエラーになる原因・対処法を説明し、Bashとの違いやPHPファイルへ切り出す目安も補足します。

PHPの関数の戻り値や、ちょっとした計算結果だけを確認したいことがあります。そのためだけにPHPファイルを作るのも少し手間です。

そんなときは、php -rでコマンドラインからPHPコードを直接実行できます。今回はPowerShellでの基本的な使い方と、引用符でつまずきやすい点を紹介します。最後にBashの場合も少し補足します。

php -rの基本形

-rは、引数として渡したPHPコードを実行するCLI用のオプションです。PHPがインストールされ、PowerShellからphpを呼び出せる状態なら、次のように試せます。

php -r 'echo "Hello, PHP!", PHP_EOL;'
Hello, PHP!

-rの後ろが実行するコードです。外側のシングルクォート'はPowerShellでコード全体を一つの文字列として渡すためのもの、内側のダブルクォート"はPHPの文字列を書くためのものです。PHP_EOLで末尾に改行を付けています。

<?phpや?>は付けません。また、通常のPHPコードと同じように文末のセミコロン;が必要です。-rではPHPの終了タグによるセミコロンの省略もできないので、最後の文にも付けましょう。

今回の確認環境

WindowsのOSビルド10.0.26300、PowerShell 7.6.9、PHP 8.3.15(CLI)で、本文のPowerShell例を確認しました。環境は次のコマンドで調べられます。

$PSVersionTable.PSVersion
$PSNativeCommandArgumentPassing
Get-Command php -CommandType Application | Select-Object -ExpandProperty Source
php -v

今回の$PSNativeCommandArgumentPassingはWindowsでした。これは外部プログラムへ引数を渡す方法の設定です。PowerShell 7.3で引用符を含む引数の扱いが変わっているため、Windows PowerShell 5.1やLegacy設定で、以下の記述が同じように動くとは限りません。この記事では7.6.9の上記設定を対象にします。

phpが見つからない場合は、PHPの実行ファイルの場所とPATHを確認してください。また、CLIとWebサーバーで使うPHPは別の場合があります。詳しくはWindows版PHPの実行方式と環境の確認方法も参照してください。

変数や関数を使ってみる

コードは一つの文に限りません。例えば、単価と個数を変数へ入れて計算してみます。

php -r '$price = 1200; $quantity = 3; echo $price * $quantity, PHP_EOL;'
3600

この$priceと$quantityはPHP側の変数です。PowerShell側の変数として用意する必要はありません。

関数の戻り値を確認するなら、var_dump()を使うと型も分かります。例えば、文字列に.csvが含まれるか確認するなら、次のように書けます。

php -r 'var_dump(str_contains("invoice-2026.csv", ".csv"));'
bool(true)

これは「含まれるか」の確認で、拡張子の検証をするコードではありません。関数の細かい挙動を試したいときに、このくらいの短いコードで確認すると便利です。

外側の引用符を変えると、PHPへ渡るコードも変わる

PowerShellは、コマンドをそのままPHPへ丸投げするわけではありません。まずPowerShellが引用符や変数を処理し、その結果をPHPへ渡します。

シングルクォートで囲んだ文字列では変数を展開しませんが、ダブルクォートで囲むと$変数名がPowerShell側で展開されます。次は、あえて失敗させる例です。

$sampleValue = 99
php -r "$sampleValue = 20; echo $sampleValue, PHP_EOL;"

この場合、PHPへ渡るのは次の文字列です。

99 = 20; echo 99, PHP_EOL;

変数への代入ではなく、数値の99へ代入しようとする形になってしまいました。今回の環境では、unexpected token "="を含むPHPの構文エラーになりました。

PHPの変数をそのまま渡したいので、外側をシングルクォートに戻します。

php -r '$sampleValue = 20; echo $sampleValue, PHP_EOL;'
20

これならPHP側の$sampleValueとして処理されます。エラーが出たら、PHPの文法だけでなく、その前にシェルがコードを書き換えていないか確認すると切り分けやすいです。

PHPの文字列にもシングルクォートを使いたい場合

PowerShellでは、シングルクォートで囲んだ文字列の中にシングルクォートを入れるとき、''と二つ続けます。例えば次の形です。

php -r 'echo ''PHP'', PHP_EOL;'
PHP

PHPへ渡るコードはecho 'PHP', PHP_EOL;です。ただ、引用符が増えると読みにくくなるので、最初の例のように、外側をシングルクォート、PHPの文字列をダブルクォートにすると見通しがよいかと思います。

補足:Bashの場合

Bashでも、外側をシングルクォートにして変数展開を防ぐ基本形は同じです。例えば、次のように書きます。

php -r '$price = 1200; $quantity = 3; echo $price * $quantity, PHP_EOL;'

一方、PowerShellの''でシングルクォートを含める書き方は、そのままBashへ移せません。Bashでは、シングルクォートの内側にシングルクォートを書くことはできず、いったん引用を閉じるなどの組み立てが必要です。PHPの文字列も使う場合は、冒頭の出力例のように内側をダブルクォートにしておく方が素直です。

ダブルクォートで囲んだコード内の$変数名がシェル側で展開される点は、Bashでも注意が必要です。Web上の例を使うときは、PHPコードだけでなく、どのシェル向けの記述かも確認しましょう。

長くなったらPHPファイルにする

条件分岐や繰り返しが増えたり、引用符の調整に手間がかかったりするようなら、PHPファイルにした方が読みやすくなります。例えば次をcheck.phpとして保存します。

<?php
$price = 1200;
$quantity = 3;
echo $price * $quantity, PHP_EOL;

保存したフォルダーで、次のように実行すればOKです。ファイルとして保存する場合は、通常どおり先頭の<?phpを付けます。

php .\check.php

出力は先ほどと同じ3600です。なお、php -rはコードを実行するので、ファイルの削除やDB更新を書くと実際に処理されます。また、コマンド履歴へ残る可能性があるため、APIキーやパスワードをコードへ直接書かない方が良いでしょう。

関数を一つ試す、計算結果を確認する、といった小さな用途ならphp -rで十分です。繰り返し使う処理や長いコードはファイルへ切り出す、くらいに使い分けると扱いやすいかと思います。

参考資料

この記事を書いた人

※上が私です。

奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。

これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。

【制作会社・企業様向けサポート】
  • 専任エンジニアのいない企業様に対するシステム面の不安を解消
  • 柔軟な契約形態や短納期での対応により、急なニーズにも迅速にサポート
  • システムの企画段階から運用まで、ワンストップでのサービスを提供

Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。

ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。

PowerShellでcurlを使う:REST APIのGET・JSON POSTとエラーの確認

2026.11.03

WindowsのPowerShellからcurlでREST APIを試す方法を紹介します。GETのクエリ指定、JSONファイルのPOST、Bearer認証ヘッダーの付け方に加え、レスポンスの保存やHTTPステータス・終了コードによるエラーの切り分けを解説します。

cURL PowerShell

PHP cURLの証明書エラー:VERIFYPEERを無効にする危険性とCAバンドルの設定方法

2026.11.02

PHPのcURLで「unable to get local issuer certificate」が出たとき、CURLOPT_SSL_VERIFYPEERをfalseにする対処が危険な理由を解説します。証明書の信頼性検証とホスト名照合の違いを整理し、WindowsでのCAバンドルの取得、curl.cainfoの設定、反映確認までを紹介します。

cURL OpenSSL PHP

PhpSpreadsheetでExcel読み込みのメモリ使用量を減らす:シート・列・行を絞って比較

2026.10.31

PhpSpreadsheetで必要なシート・列・行だけを読み込む方法を解説します。約18万セルのXLSXで処理時間とピークメモリを比較し、119.5MiBから16.0MiBへ削減した結果を紹介。書式を省く場合の日付判定や、読み込み範囲を絞る場合の数式への影響も確認します。

PHP PhpSpreadsheet

Windows版PHPのTS・NTSはどちらを選ぶ? Apacheの接続方式と確認方法

2026.10.30

Windows版PHPのThread Safe(TS)とNon Thread Safe(NTS)の違いと選び方を解説します。Apacheモジュール方式とFastCGI方式の違い、XAMPPの設定の読み方、CLIとWeb側で使われるPHP・php.iniの確認方法、DLLを選ぶ際の注意点を紹介します。

Apache PHP XAMPP

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP