php 8.2.2不记录语法错误到php.ini中定义的错误日志

6mw9ycah  于 2023-02-15  发布在  PHP
关注(0)|答案(2)|浏览(154)

服务器: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中。
我哪里做错了?

46qrfjad

46qrfjad1#

请检查PHP 8.2.2加载了哪个php.ini配置文件,您可以使用命令行检查所使用的php.ini文件:

$ php -i | grep 'Configuration File'
uwopmtnx

uwopmtnx2#

原来php-fpm的默认配置文件已经改变了,它现在有了一个默认设置

php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on

它绝对重写ini_set的问题,因此下面的代码

ini_set('error_log','/var/log/php')

在你的代码里没有任何意义。
如果像这样注解掉这段代码

;php_admin_value[error_log] = /var/log/php-fpm/www-error.log

在php.ini中的设置再次接管,但错误格式是混乱的,唯一的方法来修复这一切

php_admin_value[error_log] = /var/log/php
php_admin_flag[log_errors] = on

以使其格式良好地返回到原始位置,但ini_set仍然无法工作。

相关问题