我有两台服务器,一台是公共服务器,一台是我的开发服务器。
两者都有相同的操作系统版本(CentOS7.7),都使用相同的php设置(remi),都有相同的php.ini,都有相同的包(加上版本!)已安装-除了几个与apache/php无关的包(开发机器),它们几乎是相同的机器。
两者都用于将所有php错误和error_log()记录到php.ini定义的日志文件中:“/var/ error_log /php”。我刚刚更新到php 7.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");
?>在公共机器上,我看到了以下内容:
==> 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在开发机器上,我看到这样(这是正确的方式):
==> /var/log/php <==
[19-Nov-2019 10:30:28 Australia/Melbourne] ---------------------------------- start error test
[19-Nov-2019 10:30:28 Australia/Melbourne] PHP Notice: Undefined variable: NotDefined in /PATH/errorTest.php on line 8
[19-Nov-2019 10:30:28 Australia/Melbourne]
[19-Nov-2019 10:30:28 Australia/Melbourne] end我做错了什么?为什么一台服务器记录php错误日志,而另一台服务器记录apache错误日志?
这很烦人,因为所有的php错误日志消息到处都是,而不是像升级到php7.3之前那样放在一个日志文件中。
请帮帮忙,谢谢。
发布于 2019-11-20 17:33:43
我尝试了各种PHP版本(7.2、7.3、7.4),但无法重现。
我怀疑是写访问权限问题:
默认情况下,/var/日志属于超级用户所有,普通用户无法写入,例如apache
这可以通过运行和跟踪httpd调试进程来检查
# service httpd stop
# strace httpd -X也是
# ls -al /var/log
# ls -al /var/log/php允许普通用户登录/var/PoV似乎是一种不好的做法(安全日志)。
更改php.ini是一种非常糟糕的做法,尤其是在这种情况下,每个用户都需要不同的设置。
阅读How to change configuration settings
我建议:
为日志创建一个"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默认提供的配置文件,而是创建您自己的特定文件
P.S.当PHP无法打开error_log指令配置的文件时,默认的SAPI日志记录是PHP的标准行为。
https://stackoverflow.com/questions/58924732
复制相似问题