我在 CentOS 6 64 位上,带有 PHP 5.4.12。
这是 PHP 非常奇怪的行为。
请参阅以下脚本:
echo 'Trying Query: whereis jbig2dec<br>';
exec('whereis jbig2dec',$output) or die('Failed');
$location=explode(' ',implode($output));
$location=$location[1];
echo 'Result: '.implode($output)."<p>";
echo 'Trying Query: '.$location.' --help<br>';
exec($location.' --help',$output) or die('Failed');
echo 'Result: '.implode($output)."<p>";
echo 'Trying Query: jbig2dec --help<br>';
exec('jbig2dec --help',$output) or die('Failed');
echo 'Result: '.implode($output)."<p>";
结果是:
Trying Query: whereis jbig2dec
Result: jbig2dec: /usr/local/bin/jbig2dec
Trying Query: /usr/local/bin/jbig2dec --help
Failed
基本上,您可以看到,PHP exec 函数对 有效,whereis jbig2dec
但对 失败/usr/local/bin/jbig2dec --help
。但如果我在 SSH 中输入/usr/local/bin/jbig2dec --help
或 ,jbig2dec --help
我会从 jbig2dec 获得正确的响应。
怎么会这样?
答案1
通过 SSH检查返回值/usr/local/bin/jbig2dec --help
如下:
$ /usr/local/bin/jbig2dec --help
[... generates some output ...]
$ echo $?
最后一条命令打印前一次调用的“返回值”。返回值为0
“shell 方式”表示“命令执行成功”。返回其他值表示出现错误。
如果exec()
遇到非 0 的返回值(某些程序在帮助消息中给出该值,因为该程序在技术上并未运行),它将在 PHP 上下文中返回“false”,从而触发该or die()
部分并使用给定的错误消息终止 PHP 脚本。
简而言之:您的命令可能不会返回成功状态,并且您已告诉 PHPdie()
如果没有返回成功状态。