PHP shebang通过sudo或cron调用时打印头文件


/usr/bin/env php shebang prints headers when called via sudo or cron

我使用#!/usr/bin/env php在命令行调用PHP脚本,它一直工作得很好。PHP正确地检测命令行并抑制HTTP标头。

但是我开始通过sudo或通过cron作业调用我的脚本,它已经开始打印HTTP头。

>> ./test 
Hello world!
>> sudo -u nathan ./test 
Content-type: text/html
Hello world!

。/test只包含以下代码:

#!/usr/bin/env php
<?php
echo 'Hello world!' , "'n";

我认为这与脚本是否传递tty有关,但我不确定。是否有办法防止这些标题被打印?我不能使用"-q"参数,我不认为,因为我是通过env调用它的。

您的脚本打印HTTP头文件,因为/usr/bin/env php调用PHP的CGI版本可执行文件而不是CLI。您可以通过首先运行which php来验证这一点,以找出/usr/bin/env php指向的位置。然后运行/usr/bin/php -v(或者which php返回的任何路径),看看它是CGI还是CLI。

默认情况下,PHP同时构建为CLI和CGI。因此,要么修复您的PHP设置,要么使用-q选项而不是env的硬编码路径,因为您是对的,您不能使用env选项。我会选择第一个