首頁  >  文章  >  後端開發  >  如何解決php寫入檔案權限失敗 file_put_contents: failed to open stream: Permission denied

如何解決php寫入檔案權限失敗 file_put_contents: failed to open stream: Permission denied

步履不停
步履不停原創
2019-06-06 14:13:2310863瀏覽

如何解決php寫入檔案權限失敗 file_put_contents: failed to open stream: Permission denied

問題

寫日誌的方法中用到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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn