php - 当我已经有似乎被忽略的 php.ini 指令来执行此操作时,如何让 apache 将 php 错误写入 apache 错误日志?
问题描述
我有这样的 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
anderror_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
推荐阅读
- blockchain - 找不到适合我的众筹 cordapp 的架构
- dart - 单击父选项卡后,我想创建动态子选项卡和子 TabBarViews
- c# - 箭头键绑定不触发
- ios - UNNotificationServiceExtension 是否允许访问用户位置 iif 权限 - iOS
- mongodb - 如何从 mongodb 到字符串格式日期之间过滤数据库
- jenkins - 在 Jenkins Active Choice Reactive 参数中使用 Groovy 执行 AWS KMS 命令
- java - 如何实际测试具有空指针异常的控制器的服务器响应
- javascript - 关于图像文件的 php 和 javascript 中的 Ajax 代码
- erlang - Assert_receive 来测试 Genserver 消息处理程序?
- python - 在excel中将工作表名称添加到自负的最终合并工作表