3

#!/usr/bin/env php用来在命令行调用 PHP 脚本,效果很好。PHP 正确检测命令行并抑制 HTTP 标头。

但是我开始通过或通过 cron 作业调用我的脚本sudo,它已经开始打印 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 调用它的。

4

1 回答 1

6

您的脚本会打印 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​​。-q因此,要么修复您的 PHP 设置,要么使用带有选项而不是 的硬编码路径env,因为您是对的,您不能使用带有env. 我会做第一个。

于 2013-01-15T22:03:41.673 回答