PHP 錯誤不儲存在 CentOS 伺服器上
我剛剛在 /etc/php.ini 中調整了我的 CentOS 64 位 VPS 上的 php.ini 以記錄 PHP 錯誤:
cat /etc/php.ini | grep php-errors.log error_log = /var/log/php-errors.log
我也有
log_errors = on
我在 /var/log/ 中創建了日誌文件,它是 CHMOD 644。我還打開了錯誤報告 E_ALL
cat /etc/php.ini | grep error_reporting ; error_reporting error_reporting = E_ALL ; Eval the expression with current error_reporting(). Set to true if you want ; error_reporting(0) around the eval().
然後我重新啟動了 httpd 守護程序。當我通過 WordPress 上傳器添加文件時,我看到由於權限問題而未上傳
“cannot-open-file.png” has failed to upload due to an error Unable to create directory wp-content/uploads/2014/05. Is its parent directory writable by the server?
,但它不會作為錯誤儲存在 php-errors.php 中:
pwd /var/log ls -l | grep php -rw-r--r-- 1 root root 0 May 6 06:21 php-errors.log
我所有其他登錄
/var/log/httpd
也是root:root
如此,所以我認為日誌記錄會起作用。當我apache:apache
按照建議調整文件的權限時,日誌文件中仍然沒有錯誤。即使將錯誤記錄添加到 .htaccess 也無濟於事。我還使用
phpinfo()
. 唯一載入的ini是我調整的/etc/php.ini
那個,它使用的使用者和組是 apache -User/Group apache(48)/48
。我錯過了什麼?PS 可能是這裡建議的日誌文件目錄的問題Can’t configure PHP error log我正在查看更多資訊。
從官方文件中,您應該更改**/var/log/php-errors.log**的權限,以便該文件可由 apache 使用者寫入(例如 www、www-data 等)
#chown www:www
錯誤日誌字元串
應記錄腳本錯誤的文件的名稱。該文件應該可由 Web 伺服器的使用者寫入。如果使用特殊值 syslog,則會將錯誤發送到系統記錄器。在 Unix 上,這意味著 syslog(3),而在 Windows NT 上,這意味著事件日誌。Windows 95 不支持系統記錄器。另請參閱:syslog()。如果未設置此指令,則會將錯誤發送到 SAPI 錯誤記錄器。例如,它是 Apache 中的錯誤日誌或 CLI 中的 stderr。另請參閱 error_log()。
如果您在編寫/讀取文件時遇到問題,您應該查看此答案中的詳盡列表:https ://stackoverflow.com/questions/12531408/setting-php-tmp-dir-php-upload-not-working
基本上,如果您希望 apache 寫入除 syslog 以外的 error_log 文件,則 apache 需要具有寫入權限,如果該文件尚不存在,則 apache 還需要對父文件夾具有寫入權限。
但是,如果您嘗試從 CentOS 7 開始讀取/寫入或將您的 error_log 設置為 /tmp 文件夾,則這些都不適用。答案在這裡:https ://stackoverflow.com/questions/10752396/cant-write-to-tmp-with-php-despite-777-permissions-and-no-open-basedir-value?rq=1參考這個部落格http://blog.oddbit.com/2012/11/05/fedora-private-tmp/解釋瞭如何
systemd
不允許它。