如何在脚本的同一目录中记录错误

时间:2017-07-07 22:34:47

标签: php logging configuration

问题是:需要每个脚本将其错误记录在脚本所在的同一目录中,需要通过纯配置实现此目的。通过脚本我不是指包含的文件,我指的是执行网页的文件。

示例1

语法错误:

/var/www/html/index.php

必须登录:

/var/www/html/error.log

示例2

语法错误:

/var/www/html/foobar/page.php

必须登录:

/var/www/html/foobar/error.log

我做了一些尝试实现解决方案的配置,但它不起作用,没有创建日志文件(至少不在脚本的目录中)。

我使用phpinfo()来检查php.ini的位置,它是/etc/php.ini。在这个文件中我配置了:

log_errors = On
error_log = error.log

然后我用/sbin/shutdown -h now重新启动整个系统(重新启动计算机),然后检查phpinfo()并确认已进行更改。

我研究的是,当error_log指令的值不是绝对路径,而只是文件名,那么日志文件的位置将与的目录相同脚本,它会生成错误,并且会有该文件名。

因此,如果脚本的位置中不存在日志文件,那么应该在发生错误时在那里创建它,但由于某种原因它没有被创建。要查看它是否是权限问题,我手动创建了日志文件并为其授予了完全权限(rwxrwxrwx),但在重现错误时仍然没有记录到此文件中。最后,我还为包含日志文件的目录尝试了完全权限(rwxrwxrwx),但问题仍然存在。

那么原因和解决方案是什么?

系统信息:使用Apache的GNU / Linux CentOS。

注意:这不是error_log in the same directory as included files?的重复,此问题与所包含的文件无关。

注2:这不是PHP Parse/Syntax Errors; and How to solve them?的重复,语法错误显然只是一个随机的例子,问题不在于解决语法错误。

2 个答案:

答案 0 :(得分:0)

问题的原因是SELinux限制Apache在文件或目录中读取或写入。

解决方案

如果错误日志文件已存在:在这种情况下,另一种方法是将文件的SELinux上下文更改为httpd_sys_rw_content_t类型(而不是httpd_sys_content_t或其他类型):

chcon -t httpd_sys_rw_content_t /var/www/html/error.log

如果错误日志文件不存在且必须由Apache创建:在这种情况下,另一种方法是更改​​目录的SELinux上下文:

chcon -t httpd_sys_rw_content_t /var/www/html

来源:https://wiki.centos.org/HowTos/SELinux

答案 1 :(得分:0)

从error_log指令中删除整个路径,除了文件名。

error_log = var/www/html/error.log

to

error_log = error.log