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

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

步履不停
發布: 2023-02-23 06:34:02
原創
10933 人瀏覽過

如何解決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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板