PHP 7 脚本不显示错误,或将它们写入日志

Posted

技术标签:

【中文标题】PHP 7 脚本不显示错误,或将它们写入日志【英文标题】:PHP 7 Script not display errors, or writing them to the log 【发布时间】:2017-11-19 18:47:02 【问题描述】:

我一直在努力尝试将一些超级旧的 php 脚本移植到 PHP 7.0,但事实证明这是不可能的,因为我无法弄清楚错误是什么!如果我实现某种语法或解析错误,脚本会很高兴地向我显示这些,但是当我尝试调用 lkasjdfalkjshdfasdF();(显然没有设置)时,我无法得到任何错误告诉我我的函数未定义。

我尝试过的事情:

这是我的.htaccess 文件,与我的脚本在同一目录中

php_flag display_startup_errors on
php_flag display_errors         on
php_flag html_errors            on
php_flag log_errors             on
php_value error_log             "/var/log/apache2/error.log"

我的脚本顶部也有这个

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

如果我在其中一行添加echho 'test';,它会在页面和错误日志中显示以下内容

Parse error: syntax error, unexpected ''test'' (T_CONSTANT_ENCAPSED_STRING) in /domains/stupidphpscripts.com/public_html/lib/dumbfile.php on line 200

如果我在其中一行添加echo asdfasdf();,我不会得到任何输出,并且错误日志中也没有任何内容。

我什至写了这个愚蠢的函数

$DebugPointCointer = 0;

function DebugPoint() 
    global $DebugPointCointer;

    echo "Debug point $DebugPointCointer on line " . debug_backtrace(1)[0]['line'] . "\n";

    $DebugPointCointer++;

所以我可以确保脚本在我怀疑的地方失败了,但老实说,这些信息并没有真正帮助我。

还有什么可以尝试的?

【问题讨论】:

/var/log/apache2/error.log 是否为空,权限是什么? 如果那个日志文件真的是空的,那就是错误的文件。 @DarrellUlm 它不是空的,我注意到的错误成功进入日志文件,但是没有显示在任何地方的错误也没有显示在该日志文件中,但是日志文件显然正在处理同一脚本中的工作错误 【参考方案1】:

E_ALL 是不够的。

使用:

error_reporting(-1); // 在开发环境中为所有人和未来(仍然未实现的功能)!

你真的在正确的主机上运行吗?

可能是存储到不同错误日志的虚拟主机?

主脚本中是否包含任何 ats "@" -> @functionToCall() 可以抑制任何内容?

【讨论】:

以上是关于PHP 7 脚本不显示错误,或将它们写入日志的主要内容,如果未能解决你的问题,请参考以下文章

PHP 显示PHP错误时它们不显示。

crontab 不执行php脚本问题记录

将PHP错误输入到日志文件中

PHP-FPM 不写入错误日志

怎么让php打印错误日志?

在 IIS 7 上添加对 PHP 的写入权限