我能给a提供哪些有用的论据呢/usr/bin/php行?

我能给a提供哪些有用的论据呢/usr/bin/php行?,php,Php,我正在用PHP编写一个命令行实用程序 #!/usr/bin/php <?php print "Hello, world!" ?> #/usr/bin/php 是否有任何有用的标志我应该添加到#行?例如,使用Perl,我可以编写#/usr/bin/perl-w 我希望检查和警告尽可能严密,以便尽可能主动地捕捉错误、歧义或不可移植的功能;DR我会选择以下选项之一: #/usr/bin/php-q-c/location/to/known/php.ini/file如果我有权访问

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

#!/usr/bin/php
<?php
    print "Hello, world!"
?>
#/usr/bin/php
是否有任何有用的标志我应该添加到
#行?例如,使用Perl,我可以编写
#/usr/bin/perl-w


我希望检查和警告尽可能严密,以便尽可能主动地捕捉错误、歧义或不可移植的功能;DR我会选择以下选项之一:

  • #/usr/bin/php-q-c/location/to/known/php.ini/file
    如果我有权访问脚本的正确预配置
    php.ini
  • #/usr/bin/php-q-n-d错误报告=-1
    如果我没有
长版本

可以使用的命令行选项

虽然这不是强制性的,但是您可以添加
-q
,因为如果出于某种奇怪的原因PHP认为您正在CGI上下文中运行,那么这将禁止输出HTTP头

对于其余部分,一个有用的选项可能是
-c |
选项,您可以在其中提供要使用的
php.ini
文件位置,您可以将错误级别(和其他配置值)设置为您认为方便的值。您可以在脚本中提供
php.ini
,并确保它在php启动时启动,这样您就可以拥有一个公共环境,特别是当您必须在无法完全控制默认
php.ini
设置的机器上运行脚本时

如果出于某种原因,您无法为脚本提供完整的
php.ini
,但仍然希望覆盖(可能未知的)
php.ini
中的设置,那么另一个有用的选项是
-d foo[=bar]
,您可以在其中设置配置值。例如,
-d error\u reporting=-1
会将error reporting设置为
E\u ALL
。您可能希望使用
-n
来使用此设置,这将简单地丢弃路径上的任何
php.ini
。请注意,
-n
可能会有一些副作用,因为它实际上会删除所有配置,而默认设置可能不像您想象的那样合理

例如:

#!/usr/bin/php
<?php
echo ini_get('error_reporting');
echo $unknown;
如果您所在位置的PHP解释器是CGI解释器而不是CLI解释器,并且默认的
PHP.ini
已关闭
error\u reporting
。这可能不是你想要的

另一方面,如果你尝试

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

iirc错误报告应该已经在
-1/E_ALL
上的cli上。如果没有,您可以在
php.ini
中更改它,或者只使用
错误报告(-1)。与其说是二进制行,不如说是PHP开头行应该有
,作为旁白:
/usr/bin/perl-w
被认为不是一个好的做法,因为它在所有模块中都启用了警告,包括可能期望它们关闭的模块。
-q
在CLI@JoeWatkins除非在这个特定的框中
/usr/bin/php
指向php的cgi版本,并且设置了一些环境变量,使得php实际上认为它是在cgi模式下运行的,而不是在CLI模式下运行。这将非常奇怪,我不认为这是一个普遍适用的建议。@JoeWatkins问题是,如果你不知道php是如何在特定机器上设置的,如何确保你的代码运行得尽可能类似。如果添加
-q
可以帮助实现这一点,我建议这样做。我知道这与PHP5没有什么区别,PHP5引入了CLI模式,但问题是如何更好地做到安全而不是抱歉,以防管理员出于任何原因(包括试图以错误的方式修复某些问题)将
PHP
符号链接到
PHP cgi
#!/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