我可以给#!/ usr / bin / php行提供什么有用的参数?

时间:2016-11-19 15:56:12

标签: php

我正在用PHP编写命令行实用程序。

#!/usr/bin/php
<?php
    print "Hello, world!"
?>

我应该在#!行添加任何有用的标记吗?例如,使用Perl我可能会写#!/usr/bin/perl -w

我希望检查和警告尽可能紧密,以便尽可能积极地捕获错误,含糊不清或不便携的功能。

1 个答案:

答案 0 :(得分:1)

TL; DR 我会选择以下其中一项:

  • #!/usr/bin/php -q -c /location/to/known/php.ini/file如果我有权访问适当的预配置php.ini脚本
  • #!/usr/bin/php -q -n -d error_reporting=-1如果我不

长版

Here are您可以使用的命令行选项。

虽然它不是强制性的,但您可以添加-q,因为如果由于某种奇怪的原因,PHP认为您在CGI上下文中运行,则会禁止输出HTTP标头。

对于其余部分,一个有用的可能是-c <path>|<file>选项,您可以在其中提供要使用的php.ini文件位置,您可以在其中设置错误级别(和其他配置值)认为这很方便。你可以强有力地为你的脚本提供php.ini,并确保它在php启动时被选中,这样你就可以有一个共同的环境,特别是如果你必须在你没有完全控制的机器上运行你的脚本超过默认的php.ini设置。

如果由于某种原因您无法提供完整的php.ini脚本,但仍希望覆盖(可能未知的)php.ini中的设置,则另一个有用的选项是{{1您可以在其中设置配置值。例如,-d foo[=bar]会将错误报告设置为-d error_reporting=-1。您可能希望使用E_ALL起诉此设置,这只会丢弃您路径中的任何-n。请注意,php.ini可能会产生一些副作用,因为它基本上会删除所有配置,并且默认值可能不像您想象的那样合理。

例如:

-n

可能会返回

#!/usr/bin/php
<?php
echo ini_get('error_reporting');
echo $unknown;

如果您所在位置的PHP解释器是CGI而不是CLI,那么默认X-Powered-By: PHP/7.0.1 Content-type: text/html 0 已关闭php.ini。这可能不是你想要的。

另一方面,如果你尝试

error_reporting

然后这个脚本将返回

#!/usr/bin/php -q -n -d error_reporting=-1
<?php
echo ini_get('error_reporting');
echo $unknown;

即使您的-1 Notice: Undefined variable: unknown in <filename> on line 4 设置不同(因为它将被简单地丢弃),并且您正在使用CGI版本。

另请注意,您通常可以在脚本启动时使用php.ini设置正确的变量,但有一些例外情况,例如ini_set,您只能在{output_handler中正确设置1}}。使用php.ini摆脱非标准ini文件的潜在问题可能很有用。

另请注意,您通常不需要在脚本中添加结尾-n,并且在结束?> <之后有时可以帮助解决由看不见的额外空白字符引起的奇怪错误/ p>