PHP Conference Japan 2024

在 Windows 系统上命令行运行 PHP

本节包含一些特定于在 Windows 上从命令行运行 PHP 的说明和提示。

注意:

请先阅读手动安装步骤

无需对 Windows 进行任何更改即可从命令行运行 PHP。

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

但是,有一些简单的步骤可以使此操作更简单。其中一些步骤可能已经执行过,但此处重复列出是为了提供完整的逐步序列。

    注意:

    PATHPATHEXT 都是 Windows 中预先存在的重要的系统变量,应注意不要覆盖任何一个变量,而只需向其中添加内容。

  • 将 PHP 可执行文件(php.exephp-win.exephp-cli.exe,具体取决于 PHP 版本和显示偏好)的位置附加到 PATH 环境变量。有关如何将相应目录添加到 PATH 的更多信息,请阅读相应的常见问题解答条目

  • .PHP 扩展名附加到 PATHEXT 环境变量。这可以在修改 PATH 环境变量的同时进行。按照常见问题解答中描述的相同步骤操作,但修改 PATHEXT 环境变量而不是 PATH 环境变量。

    注意:

    .PHP 所处的位置将决定在文件名匹配时执行哪个脚本或程序。例如,如果 .PHP 位于 .BAT 之前,则如果存在同名的批处理文件,则将运行脚本而不是批处理文件。

  • .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
有关此问题的更多信息,请参阅此» Microsoft 知识库文章:321788。从 Windows 10 开始,此设置似乎已反转,使 Windows 10 的默认安装自动支持继承的控制台句柄。此» Microsoft 论坛帖子提供了说明。

添加注释

用户贡献的注释 2 条注释

pimroes at gmail dot com
13 年前
确保您以管理员身份运行 CMD.exe,否则在运行命令时会出现“拒绝访问”错误。
rudigerw at hotmail dot com
8 年前
在 Windows 10 上,仅通过在提升的命令提示符中键入脚本名称来启动 php 会弹出一个对话框,要求选择一个应用程序。
事实证明,当通过 ftype 关联的 phpfiles 程序无法执行时,Windows 会这样做。在这种情况下,这是因为即使从提升的命令提示符启动,它也尝试以非管理员模式运行 php.exe。要解决此问题,请找到您的 php.exe,右键单击,“属性”,“兼容性”,在“设置”下选中“以管理员身份运行此程序”;然后还单击“更改所有用户的设置”。
To Top