执行PHP文件
有三种不同的方法可以为PHP代码提供CLI SAPI来执行。
-
告诉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。在网络服务下运行时,某些操作会失败,因为“帐户名和安全 ID 之间没有映射”。