PHP Exec 函数报告某些通过 SSH 运行的命令失败

PHP Exec 函数报告某些通过 SSH 运行的命令失败

我在 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()如果没有返回成功状态。

相关内容