Apache-2.2

PHP 錯誤不儲存在 CentOS 伺服器上

  • November 25, 2021

我剛剛在 /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不允許它。

引用自:https://serverfault.com/questions/593308