服务器:Linux操作系统,PHP 8.2.2
我有许多服务器的各种PHP版本,在大多数情况下,下面的代码正确地记录到指定的错误日志文件。我有一个问题的服务器刚刚升级到PHP 8.2.2。
我的php.ini里有
// I have tried a variety of settings
error_reporting = E_ALL
log_errors = On
display_errors = Off
html_errors = Off
error_log = /var/log/php
我有一点代码(只是重要的部分)
<?php
error_reporting(E_ALL);
ini_set('log_errors', 1);
ini_set('display_errors', 0);
ini_set('error_log','/var/log/php');
mysqli_report(MYSQLI_REPORT_OFF);
// debug message
error_log("start of script");
// removed the error handling in the code
// the connection works, I know!
$MJCONN = mysqli_connect($hostname, $username, $password);
mysqli_select_db($MJCONN, $database);
// many lines of code deleted
if(!$result = mysqli_query($MJCONN, $TheQuery)) {
error_log("It's dead Jim");
exit;
}
// many lines of code deleted
// here is my error, I mispelled the variable name
while($r = mysqli_fetch_assoc($resulr))
{
// some code here
}
?>
使用error_log("脚本开始")的调试消息正确显示在文件中,因此这不是权限错误。
无论我怎么尝试,变量名拼写错误从来没有显示在日志文件中。我甚至尝试拼写一个函数名,同样没有显示在error_log文件中。
如果我设置这个:
error_reporting(E_ALL);
ini_set('log_errors', 1);
ini_set('display_errors', 1);
ini_set('error_log','/var/log/php');
它工作正常,错误显示在屏幕上,这不是我想要的。我想要语法-或者最好是所有错误-记录在error_log中。
我哪里做错了?
2条答案
按热度按时间46qrfjad1#
请检查PHP 8.2.2加载了哪个
php.ini
配置文件,您可以使用命令行检查所使用的php.ini
文件:uwopmtnx2#
原来php-fpm的默认配置文件已经改变了,它现在有了一个默认设置
它绝对重写ini_set的问题,因此下面的代码
在你的代码里没有任何意义。
如果像这样注解掉这段代码
在php.ini中的设置再次接管,但错误格式是混乱的,唯一的方法来修复这一切
以使其格式良好地返回到原始位置,但ini_set仍然无法工作。