繁体   English   中英

How can I have apache write php errors into apache error log, when I already have php.ini directives to do this that seem to be ignored?

[英]How can I have apache write php errors into apache error log, when I already have php.ini directives to do this that seem to be ignored?

我有 Apache 指令,如下所示:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = On
log_errors = On
log_errors_max_len = 10240
error_log = php_errors.log

我在我的一个页面上收到此错误 - 错误显示在浏览器中。

Deprecated: Function money_format() is deprecated in /var/www/html/sample.php on line 152

这很好,因为它显示我的代码中有错误。 但令我惊讶的是,当在 Apache 配置中我明确要求不显示不推荐使用的错误( ~E_DEPRECATED )时,它显示了不推荐使用的错误。

但是,不管......因为它是生产环境,我需要看到错误,而不是在浏览器中看到它。 所以我将display_errors设置为Off 但是现在,我没有看到错误,尽管我的 php.ini 配置有这样做的指令,但它没有记录在任何地方。

问题

如何在日志中看到错误(最好是 apache 的 error.log 最好),但在浏览器中看不到。 我很困惑为什么它没有以这种方式发生,因为我的 php.ini 指令似乎要求 php 通过log_errorserror_log指令执行此操作

虚拟主机配置

<VirtualHost *:80>
    ServerName apps.domain.com
    ServerAdmin admin@domain.com
    DocumentRoot /var/www/html
   <Directory /var/www/html>
       AllowOverride All
       Require all granted
   </Directory>
    Redirect permanent "/" "https://apps.domain.com/"
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =apps.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

日志目录需要存在并且可由 apache 访问(在 linux 上,这可以通过sudo chown www-data:www-data /var/log/php完成)

如何配置 php 做你想做的事?

对于这种特定情况,您无需为 apache 配置编辑任何内容,但您需要为php.ini编辑配置

// add this your php.ini file
display_errors = Off
error_log = /var/log/php/error.log # Assuming you have /var/log/php directory and it's writable by httpd
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

只改变你的 apache 指令来做你想做的事

您的 apache 配置中出现的问题是您指定的路径不正确。

您需要指定绝对路径 EG /var/log/php/error.log或者您可以根据文档根目录指定路径,例如%{DOCUMENT_ROOT}/log/error.log

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM