2008-12-06 50 views
17

下面是我尝试执行命令,没有成功:如何检索PHP exec()错误响应?

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

当你在末尾添加一个模具(),它捕获的是有一个错误:

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

对于上述EXEC( )声明,权限问题导致错误,但PHP不显示它。你如何从PHP显示什么错误发生?

回答

15

你可以通过一个可选的第二个参数接收exec function的输出结果:

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output); 
var_dump($output); 
+5

$输出将只持有从sdtout输出不“2之间的空间是很重要的sdterr – Amaynut 2016-10-27 20:40:51

2

如果不通过第二个参数发现错误,你可以搜索的Apache的错误日志,例如在Ubuntu服务器12.10通过命令 $ tail /var/log/apache2/error.log 我正在运行一个python脚本,它的错误只在那里打印,因此我能够诊断它。 此致敬礼。

7

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

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

如果$ CMD拥有exec命令添加如下内容:

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

然后检查$ error_log中的文件规范对命令失败原因的详细信息的内容。

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

6

下面的代码将同时捕获正常输出(来自STDOUT)和误差输出(来自SdtErr)。

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

为我工作:) – vijay 2017-01-18 13:13:10

2

这几种情况下工作对我来说:

ob_start(); 
exec($cmd . " 2>&1", $output); 
$result = ob_get_contents(); 
ob_end_clean(); 
var_dump($result); 

在这种情况下