两个相同服务器上的PHP错误:一个记录到PHP错误日志,另一个记录apache错误日志

两个相同服务器上的PHP错误:一个记录到PHP错误日志,另一个记录apache错误日志,php,php-7.3,Php,Php 7.3,我有两个服务器,一个是公共服务器,一个是我的开发服务器 两者都有相同的操作系统版本(CentOS7.7),都使用相同的php设置(remi),都有相同的php.ini,都安装了相同的软件包(加上版本!)——除了少数与apache/php无关的软件包(开发机器),它们几乎是相同的机器 两者都用于将所有php错误和错误日志()记录到php.ini定义的错误日志文件:“/var/log/php”。我刚刚更新到PHP7.3,除了日志记录之外,一切都很好。现在,开发机器记录到php日志,而公共机器记录到a

我有两个服务器,一个是公共服务器,一个是我的开发服务器

两者都有相同的操作系统版本(CentOS7.7),都使用相同的php设置(remi),都有相同的php.ini,都安装了相同的软件包(加上版本!)——除了少数与apache/php无关的软件包(开发机器),它们几乎是相同的机器

两者都用于将所有php错误和错误日志()记录到php.ini定义的错误日志文件:“/var/log/php”。我刚刚更新到PHP7.3,除了日志记录之外,一切都很好。现在,开发机器记录到php日志,而公共机器记录到apache错误日志

我不明白为什么会这样,我需要一些帮助

在php.ini文件中的两台机器上,我设置了:

display_errors = Off
display_startup_errors = Off
log_errors = On
html_errors = Off
error_log = /var/log/php
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
在这两台计算机上,权限都是正确的:

[user@PUBLIC /var/log/httpd] #>ls -la /var/log/php
-rw-rw----. 1 apachedaemon apachedaemon 199923 Nov 19 10:11 /var/log/php
[user@DEVELOPMENT /var/log] #>ls -la /var/log/php
-rw-rw---- 1 apachedaemon apachedaemon 158103 Nov 19 10:58 /var/log/php
在这两台机器上,我都有一个php脚本:

<?php
ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
error_log("---------------------------------- start error test");
error_log($NotDefined);
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>php error test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>php error test</h1>
<p> </p>
</body>
</html>
<?php
error_log("end");
?>

php错误测试
php错误测试

在公共机器上,我看到:

==> 1.2.3.4_ssl_error_log <==
[Tue Nov 19 10:43:07.257073 2019] [php7:notice] [pid 4462] [client W.X.Y.Z:44844] ---------------------------------- start error test
[Tue Nov 19 10:43:07.257126 2019] [php7:notice] [pid 4462] [client W.X.Y.Z:44844] PHP Notice:  Undefined variable: NotDefined in /PATH/errorTest.php on line 8
[Tue Nov 19 10:43:07.257137 2019] [php7:notice] [pid 4462] [client W.X.Y.Z:44844]
[Tue Nov 19 10:43:07.257147 2019] [php7:notice] [pid 4462] [client W.X.Y.Z:44844] end

=>1.2.3.4\u ssl\u error\u log/var/log/php我尝试了各种php版本(7.2、7.3、7.4),但无法复制

我怀疑存在写入访问权限问题:

  • 默认情况下/var/log归root所有,普通用户(如apache)无法写入
  • /如果在httpd服务创建此文件之前运行了任何php脚本,则任何用户(root?)都可以创建var/log/php
这可以通过运行和跟踪httpd调试过程来检查

# service httpd stop
# strace httpd -X

允许普通用户登录/var/log似乎是一种糟糕的做法(安全PoV)

修改php.ini是一种非常糟糕的做法,尤其是在这种情况下,每个用户都需要不同的设置

阅读

我建议:

为日志创建“apache”拥有的目录

# mkdir /var/log/apache
# chown apache  /var/log/apache
并在每个vhost配置文件中配置httpd服务以使用它

php_admin_value error_log /var/log/apache/vhostname_php_error.log
我还建议不要更改RPM默认提供的配置文件,而是创建自己的特定文件

  • /etc/php.d/foo.ini
  • /etc/httpd/conf.d/bar.conf

当PHP无法打开由error_log指令配置的文件时,默认SAPI日志记录的备份是PHP的标准行为。

在您发布的脚本中,初始化
$NotDefined
?@AlbertoSinigaglia这篇文章/问题的全部要点,我需要提出一个错误来记录它…你得到了一个错误,因为error\u log作为第一个参数需要一个字符串,你给他传递了一个以前从未初始化过的变量,所以它是一个未定义的变量。。。你想如何处理错误日志($NotDefined)?我知道!我想要一个错误!我需要弄清楚为什么PHP错误在生产和开发服务器上的显示方式不同。在生产环境中,它们会出现在apache错误日志中,而在开发服务器上,它们会出现在php错误日志中!在php.ini上,应该有一个
error\u log=/var/log/php scripts.log
,它告诉
error\u log
函数在哪里放置日志
# mkdir /var/log/apache
# chown apache  /var/log/apache
php_admin_value error_log /var/log/apache/vhostname_php_error.log