问题是:需要每个脚本将其错误记录在脚本所在的同一目录中,需要通过纯配置实现此目的。通过脚本我不是指包含的文件,我指的是执行网页的文件。
示例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?的重复,语法错误显然只是一个随机的例子,问题不在于解决语法错误。
答案 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
答案 1 :(得分:0)
从error_log指令中删除整个路径,除了文件名。
error_log = var/www/html/error.log
to
error_log = error.log