/ usr/bin/env php shebang通过sudo或cron调用时打印标题

Nat*_*n P 3 php

我正在使用#!/usr/bin/env php命令行调用PHP脚本,该脚本运行良好.PHP正确检测命令行并禁止HTTP标头.

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

>> ./test 
Hello world!

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

Hello world!
Run Code Online (Sandbox Code Playgroud)

./test只包含以下代码:

#!/usr/bin/env php
<?php

echo 'Hello world!' , "\n";
Run Code Online (Sandbox Code Playgroud)

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

Ger*_*osi 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.因此要么修复你的PHP设置,要么使用带有-q选项的硬编码路径而不是env,因为你是对的,你不能使用选项env.我会先做第一个.