PHP 8.1.28 Released!

Microsoft Windows のコマンドラインでの PHP

この節では、PHP を Windows のコマンドラインで実行するときの注意点やヒントを説明します。

注意:

まず最初に 手動でのインストールの手順 を読みましょう!

特に Windows に手を加えなくても、PHP をコマンドラインから実行することはできます。

C:\php\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3

しかし、次の手順に従えば、さらにシンプルに実行することができます。 この中にはすでに実行済みのものがあるかもしれませんが、 順を追って進めていくために もう一度ここで説明しておきます。

    注意:

    PATHPATHEXT は Windows で重要な働きをするシステム変数です。 既存の変数の値を上書きしないように注意しましょう。 あくまでも追記するだけにします。

  • PHP の実行ファイル (php.exephp-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
    

このようにしておくと、どのディレクトリにあるスクリプトを実行するときにも 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
のように使うということです。 このようにすると、スクリプトがハングして何も出力されなくなります。 これをうまく動作させるには、さらにレジストリを変更しなければなりません。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"InheritConsoleHandles"=dword:00000001
この件に関する詳細な情報は » Microsoft Knowledgebase Article : 321788 を参照ください。 Windows 10 ではこの設定が変更されたようです。Windows 10 をインストールしたデフォルトの状態で、 コンソールのハンドルが自動的に引き継がれるようになります。この件に関しては、 »  Microsoft のフォーラムへの投稿 に説明があります。

add a note

User Contributed Notes 4 notes

up
4
vechenjivot at gmail dot com
8 years ago
On Windows 10, the above registry entries didn't work for me. In order for them to work, you need to write to
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.php\UserChoice
for which you don't have access, even if you run regedit as admin (probably because of the Hash key).
The solution is actually much easier - right-click a PHP file in Explorer and associate it to always open with php.exe.
And then you need to modify the PATH variable:
setx PATH "%PATH%;c:\path\to\php" /M
if you want to execute files with commands like
php file.php
up
4
pimroes at gmail dot com
13 years ago
Make sure your run CMD.exe as an administrator, otherwise you'll get an "access denied" when you run the commands.
up
1
rudigerw at hotmail dot com
8 years ago
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".
up
0
elhadjouattara at gmail dot thrcom
8 years ago
On Windows 8, with php 5.6.8 win32 VC11 in command line, need to indicate path with / rather than backslash \
Hence C:\Users\toshiba\Documents\php\test.php shall be C:/Users/toshiba/Documents/php/test.php
To Top