Microsoft Windows のコマンドラインでの PHP
この節では、PHP を Windows のコマンドラインで実行するときの注意点やヒントを説明します。
注意:
まず最初に 手動でのインストールの手順 を読みましょう!
特に Windows に手を加えなくても、PHP をコマンドラインから実行することはできます。
C:\php\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3
しかし、次の手順に従えば、さらにシンプルに実行することができます。 この中にはすでに実行済みのものがあるかもしれませんが、 順を追って進めていくために もう一度ここで説明しておきます。
-
PHP の実行ファイル (php.exe、 php-win.exe あるいは php-cli.exe。 PHP のバージョンや設定によって変わります) がある場所を環境変数 PATH の最後に追加します。 PHP のディレクトリを PATH に追加する方法は、FAQ の項目 を参照ください。
-
拡張子
.PHP
を、環境変数 PATHEXT の最後に追加します。これは、環境変数 PATH の変更と同時に行うこともできます。 FAQ に書かれている手順に従いましょう。ただし、環境変数 PATH の部分は PATHEXT に変更します。注意:
.PHP
をどの位置に書くかによって、 ファイル名がマッチしたときに実行されるスクリプトあるいはプログラムが決まります。 たとえば.PHP
を.BAT
より前に書くと、 同じ名前のバッチファイルがあってもスクリプトのほうを優先して実行します。 -
拡張子
.PHP
をファイル形式と関連づけます。 これは、次のコマンドで行います:assoc .php=phpfile
-
ファイル形式
phpfile
を適切な PHP 実行ファイルと関連づけます。 これは、次のコマンドで行います。ftype phpfile="C:\php\php.exe" -f "%1" -- %~2
注意:
PATH と PATHEXT は Windows で重要な働きをするシステム変数です。 既存の変数の値を上書きしないように注意しましょう。 あくまでも追記するだけにします。
このようにしておくと、どのディレクトリにあるスクリプトを実行するときにも
PHP 実行ファイルのパスや拡張子 .PHP
をタイプしなくて済むようになります。
また、スクリプトに渡すパラメータを指定することもできます。
次の例は、レジストリの変更の一部を示したものです。これらは手動で行うこともできます。
例1 Registry changes
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php] @="phpfile" "Content Type"="application/php" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile] @="PHP Script" "EditFlags"=dword:00000000 "BrowserFlags"=dword:00000008 "AlwaysShowExt"="" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon] @="C:\\php\\php-win.exe,0" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell] @="Open" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open] @="&Open" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command] @="\"C:\\php\\php.exe\" -f \"%1\" -- %~2"
これらの変更をすれば、同じコマンドを次のように書くことができます:
"C:\PHP Scripts\script" -arg1 -arg2 -arg3
"C:\PHP Scripts"
が環境変数
PATH に含まれていれば、次のように書くこともできます:
script -arg1 -arg2 -arg3
注意:
これらのテクニックを使って PHP スクリプトをコマンドラインフィルタとして使おうとすると、 ちょっとした問題が発生します。 「コマンドラインフィルタとして使う」とは、たとえば
あるいはdir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3のように使うということです。 このようにすると、スクリプトがハングして何も出力されなくなります。 これをうまく動作させるには、さらにレジストリを変更しなければなりません。dir | script -arg1 -arg2 -arg3この件に関する詳細な情報は » Microsoft Knowledgebase Article : 321788 を参照ください。 Windows 10 ではこの設定が変更されたようです。Windows 10 をインストールしたデフォルトの状態で、 コンソールのハンドルが自動的に引き継がれるようになります。この件に関しては、 » Microsoft のフォーラムへの投稿 に説明があります。Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer] "InheritConsoleHandles"=dword:00000001
User Contributed Notes 2 notes
Make sure your run CMD.exe as an administrator, otherwise you'll get an "access denied" when you run the commands.
On Windows 10 starting php by only typing the script name in an elevated command prompt pops up a dialog to choose an app.
It turns out Windows does that when the program associated with phpfiles through ftype cannot be executed. In this case this happens because it is trying to run php.exe in non-admin mode, even when launched from an elevated command prompt. To fix this, locate your php.exe, right-click, "Properties", "Compatibility", under Settings check "Run this program as an administrator; then also click "Change settings for all users".