如何检索 PHP exec() 错误响应?

2022-08-30 11:59:39

以下是我尝试执行的命令,但没有成功:

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess');

当你在最后添加一个die()时,它会发现有一个错误:

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess') or die('what?!');

对于上述 exec() 语句,权限问题导致了错误,但 PHP 没有显示它。如何从PHP显示发生了什么错误?


答案 1

以下代码将捕获正常输出(来自 StdOut)和错误输出(来自 SdtErr)。

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess 2>&1',$output);
var_dump($output);

答案 2

如果调用程序将输出吐到 STDERR,则 $output 参数似乎不起作用。

处理此问题的更好方法是将输出从 exec 重定向到文件,然后在出现错误情况时显示该文件的内容。

如果$cmd持有 exec 命令,请添加如下内容:

$cmd.=" > $error_log 2>&1"

然后检查 $error_log 中文件规范的内容,以获取有关命令失败原因的详细信息。

另请注意,如果您在命令末尾使用 &将其分叉,则立即检查$error_log 的内容可能不会显示日志信息 - 脚本可能会在操作系统完成之前检查/处理文件。


推荐