我有如下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_errors和error_log指令来完成这个任务。
虚拟主机Config
<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]发布于 2020-05-13 23:13:02
日志目录需要存在并可由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配置的错误之处在于您指定了一个不正确的路径。
您需要指定绝对路径E.G /var/log/php/error.log,也可以根据文档根指定路径(如%{DOCUMENT_ROOT}/log/error.log )
https://stackoverflow.com/questions/61786151
复制相似问题