PHP 8.1.31 Released!

在 Windows 系统的命令行上运行 PHP

本章包含有针对在 Windows 下以命令行运行 PHP 的说明与提示。

注意:

阅读 手工安装步骤

要在命令行下运行 PHP,可以无需对 Windows 做任何改动。

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

但是有几个很容易的步骤可以使其更加简便。某些步骤可能已经在之前完成了,不过还是在这里重复说明以便提供一个完整的步骤序列。

    注意:

    PATHPATHEXT 都是在 Windows 下已有的重要环境变量,要留意不要覆盖了其内容,仅仅是向其中添加内容。

  • 将 PHP 可执行文件(php.exephp-win.exe 或者 php-cli.exe)的路径添加到 PATH 环境变量中去。如何将 PHP 目录添加到 PATH 中请参阅与之相关的常见问题

  • .PHP 后缀添加到 PATHEXT 环境变量中去。可以在修改 PATH 环境变量时同时进行。跟常见问题中说明的步骤一样,要修改的是 PATHEXT 环境变量而不是 PATH 环境变量。

    注意:

    .PHP 放置到什么位置将决定具有相同文件名时运行的优先级。例如将 .PHP 放到 .BAT 之前将导致如果有同名的 PHP 脚本和批处理文件,则 PHP 脚本会运行。

  • .PHP 后缀关联为一种文件类型,用以下命令完成:

    assoc .php=phpfile
    

  • phpfile 文件类型关联到适当的 PHP 可执行文件,用以下命令完成:

    ftype phpfile="C:\php\php.exe" -f "%1" -- %~2
    

按照以上步骤将使 PHP 脚本可以在任何目录下运行,不需要输入 PHP 可执行文件名以及 .PHP 后缀,并且所有参数都会被传递给脚本来处理。

以下例子说明了可以手工修改的注册表项目变化。

示例 #1 注册表变化

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
有关此问题的更多信息见» 微软知识库文章:321788。 从 Windows 10 开始,此设置似乎被颠倒,请参考以下链接 »  Microsoft 论坛帖子

添加备注

用户贡献的备注 2 notes

up
3
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
0
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".
To Top