执行 PHP 文件
有三种不同的方法可以将 CLI SAPI 与要执行的 PHP 代码一起使用
-
告诉 PHP 执行某个文件。
两种方法(无论是否使用 -f 开关)都执行文件 my_script.php。请注意,对可以执行的文件没有限制;特别是,文件名不需要具有 .php
扩展名。
-
将要执行的 PHP 代码直接传递到命令行。
必须注意 shell 变量替换和引号的使用。
注意:
仔细阅读示例:没有开始或结束标签!-r 开关根本不需要它们,使用它们会导致解析错误。
-
通过标准输入 (stdin
) 提供要执行的 PHP 代码。
这提供了强大的能力来动态创建 PHP 代码并将其提供给二进制文件,如以下(虚构的)示例所示
不能将三种执行代码的方法中的任何一种结合起来。
与每个 shell 应用程序一样,PHP 二进制文件接受许多参数;但是,PHP 脚本也可以接收更多参数。传递给脚本的参数数量不受 PHP 限制(尽管 shell 对可以传递的字符数量有限制,但这通常不太可能遇到)。传递给脚本的参数在全局数组 $argv 中可用。第一个索引(零)始终包含从命令行调用的脚本的名称。请注意,如果使用命令行开关 -r 内联执行代码,则 $argv[0] 的值将为 "Standard input code"
;在 PHP 7.2.0 之前,它是一个连字符 ("-"
) 。如果代码通过来自 STDIN
的管道执行,则情况也是如此。
第二个全局变量 $argc 包含 $argv 数组中的元素数量(不是传递给脚本的参数数量)。
只要传递给脚本的参数不以 -
字符开头,就没有什么特殊需要注意的。传递给脚本以 -
开头的参数会导致问题,因为 PHP 解释器认为它必须自己处理它,甚至在执行脚本之前。为了防止这种情况,请使用参数列表分隔符 --
。在 PHP 解析此分隔符后,所有后续参数都将完整地传递给脚本。
但是,在 Unix 系统上,还有另一种使用 PHP 进行 shell 脚本的方法:使脚本的第一行以 #!/usr/bin/php
开头(或者,如果与你的 PHP CLI 二进制文件的路径不同)。文件其余部分应包含常规 PHP 代码,位于通常的 PHP 开始和结束标签中。一旦文件的执行属性被适当地设置(例如 chmod +x test),脚本就可以像任何其他 shell 或 perl 脚本一样执行
示例 #1 以 shell 脚本形式执行 PHP 脚本
#!/usr/bin/php
<?php
var_dump($argv);
?>
假设此文件在当前目录中名为 test,现在可以执行以下操作
$ chmod +x test
$ ./test -h -- foo
array(4) {
[0]=>
string(6) "./test"
[1]=>
string(2) "-h"
[2]=>
string(2) "--"
[3]=>
string(3) "foo"
}
正如所见,在这种情况下,传递以 -
开头的参数时无需格外小心。
PHP 可执行文件可用于完全独立于 Web 服务器运行 PHP 脚本。在 Unix 系统上,特殊 #!
(或“shebang”)第一行应添加到 PHP 脚本中,以便系统可以自动确定哪个程序应该运行脚本。在 Windows 平台上,可以将 php.exe 与 .php
扩展名的双击选项关联,或者可以创建批处理文件以通过 PHP 运行脚本。Unix 的特殊 shebang 第一行在 Windows 上不会造成伤害(因为它被格式化为 PHP 注释),因此可以通过包含它来编写跨平台程序。下面显示了一个编写命令行 PHP 程序的简单示例。
示例 #2 旨在从命令行运行的脚本 (script.php)
#!/usr/bin/php
<?php
if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>
这是一个只有一个选项的命令行 PHP 脚本。
用法
<?php echo $argv[0]; ?> <option>
<option> 可以是你想要的任何单词
打印出来。使用 --help、-help、-h
或 -? 选项,你可以获得此帮助。
<?php
} else {
echo $argv[1];
}
?>
上面的脚本包含 Unix shebang 第一行为表示此文件应由 PHP 运行。我们在这里使用的是 CLI 版本,因此不会输出任何 HTTP 标头。
程序首先检查是否有所需的单个参数(除了脚本名称外,也将其计算在内)。如果没有,或者如果参数是 --help、-help、-h 或 -?,则使用 $argv[0] 动态打印命令行中键入的脚本名称,输出帮助消息。否则,将按原样回显参数。
要在 Unix 上运行上述脚本,必须将其设为可执行文件,并简单地调用 script.php echothis 或 script.php -h。在 Windows 上,可以为执行此任务创建类似于以下的批处理文件
示例 #3 用于运行命令行 PHP 脚本的批处理文件 (script.bat)
@echo OFF
"C:\php\php.exe" script.php %*
假设上述程序名为 script.php,并且 CLI php.exe 位于 C:\php\php.exe 中,此批处理文件将运行它,并传递所有附加的选项:script.bat echothis 或 script.bat -h。
另请参阅 Readline 扩展文档,以获取可用于增强 PHP 中命令行应用程序的更多函数。
在 Windows 上,PHP 可以配置为运行而无需提供 C:\php\php.exe 或 .php
扩展名,如 Microsoft Windows 上的命令行 PHP 中所述。
注意:
在 Windows 上,建议在实际用户帐户下运行 PHP。在网络服务下运行时,某些操作将失败,因为“没有在帐户名称和安全标识符之间进行映射”。