問題
寫日誌的方法中用到file_put_contents 這個方法,今天在執行回呼方法的寫日誌的時候提示沒有寫入檔案權限,報錯提示
file_put_contents: failed to open stream: Permission denied(PHP視訊教學)
解決過程
檢查日誌資料夾權限,因為是按天生成的,有個定時任務定時執行,執行用戶是root,所以生成資料夾用戶和用戶組都是root,而回調方法中執行用戶是www,寫入日誌方法中
if(!is_dir($dir)){ mkdir($dir,0777,true); }
如果目錄不存在,建立目錄,但是在php的mkdir函數建立資料夾設定777權限,實際上建立的檔案還是755的權限。在linux系統中在建立檔案/資料夾時有一個預設權限,此權限受umask 設定影響,在/etc/bashrc設定檔中我們可以找到如下配置:
if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002else umask 022fi
linux系統中預設的umask為022,與我們的777 &運算之後,就變成了755,這就是原因所在了。這裡的設定直接影響到linux系統的預設權限設置,不只是PHP的問題。所以不建議直接進行修改把022 改為 000 。
最後解決方案
先建立目錄,再使用chmod將權限修改為 777
mkdir('test', 0777); chmod('test', 0777);
以上是如何解決php寫入檔案權限失敗 file_put_contents: failed to open stream: Permission denied的詳細內容。更多資訊請關注PHP中文網其他相關文章!