寫日誌的方法中用到 file_put_contents 這個方法,今天在執行回調方法的寫日誌的時候提示沒有寫入文件權限,報錯提示php
file_put_contents: failed to open stream: Permission denied
檢查日誌文件夾權限,由於是按天生成的,有個定時任務定時執行,執行用戶是root,因此生成文件夾用戶和用戶組都是root,而回調方法中執行用戶是www,寫入日誌方法中linux
if(!is_dir($dir)){ mkdir($dir,0777,true); }
若是目錄不存在,建立目錄,可是在php的mkdir函數建立文件夾設置777權限,實際上建立的文件仍是755的權限。 在linux系統中在建立文件/文件夾時有一個默認權限,此權限受 umask 設置影響,在/etc/bashrc配置文件中咱們能夠找到以下配置:bash
if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi
linux系統中默認的umask爲022,與咱們的777 &運算以後,就變成了 755,這就是緣由所在了。 這裏的設置直接影響到linux系統的默認權限設置,不單單是PHP的問題。因此不建議直接進行修改把022 改成 000 。函數
先建立目錄,再使用chmod將權限修改成 777日誌
mkdir('test', 0777); chmod('test', 0777);