下面是我尝试执行的命令,但没有成功:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess');
当您在末尾添加die()时,它会捕获到错误:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess') or die('what?!');
对于上面的exec()语句,权限问题导致错误,但PHP没有显示它.你如何从PHP显示出现了什么错误?
您可以通过传递可选的第二个参数来接收exec函数的输出结果:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output); var_dump($output);
如果调用程序将输出吐出到STDERR,则$ output参数似乎不起作用.
处理此问题的更好方法是将exec的输出重定向到文件,然后在出现错误情况时显示该文件的内容.
如果$ cmd包含exec命令,则添加如下内容:
$cmd.=" > $error_log 2>&1"
然后检查$ error_log中filespec的内容,以获取有关命令失败原因的详细信息.
另请注意,如果使用&命令结尾对其进行分叉,则立即检查$ error_log的内容可能不会显示日志信息 - 脚本可能会在操作系统完成之前检查/处理该文件.
以下代码将捕获正常输出(来自StdOut)和错误输出(来自SdtErr).
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess' . '2>&1',$output); var_dump($output);
这对我有用:在你的命令结尾附加2>&1.
在这里看到: php exec()在执行svn命令时没有在输出中返回错误消息
干杯
这在几个场景中对我有用:
ob_start(); exec($cmd . " 2>&1", $output); $result = ob_get_contents(); ob_end_clean(); var_dump($output);
"2之间的空间很重要