首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两台相同服务器上的PHP错误:一台服务器记录php错误日志,另一台服务器记录apache错误日志

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

Stack Overflow用户
提问于 2019-11-19 08:02:55
回答 1查看 281关注 0票数 1

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

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

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

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

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

代码语言:javascript
复制
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

两台机器上的权限都是正确的:

代码语言:javascript
复制
[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脚本:

代码语言:javascript
复制
<?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");
?>

在公共机器上,我看到了以下内容:

代码语言:javascript
复制
==> 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

在开发机器上,我看到这样(这是正确的方式):

代码语言:javascript
复制
==> /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之前那样放在一个日志文件中。

请帮帮忙,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-11-20 17:33:43

我尝试了各种PHP版本(7.2、7.3、7.4),但无法重现。

我怀疑是写访问权限问题:

默认情况下,/var/日志属于超级用户所有,普通用户无法写入,例如apache

  • /var/log/php可以由任何用户创建(根用户?)如果在httpd服务之前运行了任何PHP脚本,请创建此文件

这可以通过运行和跟踪httpd调试进程来检查

代码语言:javascript
复制
# service httpd stop
# strace httpd -X

也是

代码语言:javascript
复制
# ls -al /var/log
# ls -al /var/log/php

允许普通用户登录/var/PoV似乎是一种不好的做法(安全日志)。

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

阅读How to change configuration settings

我建议:

为日志创建一个"apache“拥有的目录

代码语言:javascript
复制
# mkdir /var/log/apache
# chown apache  /var/log/apache

并在每个vhost配置文件中配置httpd服务以使用它

代码语言:javascript
复制
php_admin_value error_log /var/log/apache/vhostname_php_error.log

我还建议不要修改RPM默认提供的配置文件,而是创建您自己的特定文件

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58924732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档