脚本通过exec()运行时不显示PHP错误

时间:2016-06-06 13:23:21

标签: php error-handling command-line-interface

我有通过exec函数从其他php脚本运行的php脚本:

exec("php /home/www/someScript.php 1>> /home/www/log.txt 2>&1");

如果出现错误,log.txt仅包含以下错误消息:

ERROR: the server encountered an internal error and was unable to complete your request.

但是当我使用来自CLI的完全相同的命令手动运行它时,我得到以下(和正确的输出):

PHP Fatal error:  Call to a member function toArray() on a non-object in /home/www/someScript.php on line 50
ERROR: the server encountered an internal error and was unable to complete your request.

致命错误抑制的原因是什么?如何将其正确输出到日志?

感谢。

1 个答案:

答案 0 :(得分:0)

这不会解决您的问题,因此可能不是答案,但它也不适合评论。

正如我在评论部分中所说,尝试使用includeset_error_handler一起使用。

set_error_handler(function($errno, $errstr, $errfile, $errline, array $errcontext){
    echo "Error #$errno: $errstr";
    echo "\ton $errfile:$errline\n";
    echo "Stack trace:\n";
    foreach ($errcontext as $e) {
        echo "\t$e\n";
    }
});

include "/home/www/someScript.php";

restore_error_handler();

这样,您的脚本在失败时不会中断,但您没有使用古怪的系统功能。然后我们就可以开始看看到底发生了什么。