在linux下部署完Symfony2,可能在訪問的時候會報app/logs或者app/cache目錄沒有寫權限的錯誤。在linux下,如果我們在命令行登陸的用戶和web應用服務器(apache、nginx等)的用戶不一樣的時候,
可以使用下面四個方法來解決這個問題。
1、在支持chmod +a 的系統下使用ACL
很多版本的linux系統都支持chmod +a命令,所以我們優先使用這個命令。找出web應用服務器的用戶名賦值到變量HTTPDUSER上。
1 $ rm -rf app/cache/* 2 $ rm -rf app/logs/* 3 4 $ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` 5 $ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs 6 $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
第四行命令是:找出web應用服務器的用戶名賦值給變量HTTPDUSER;第五行命令是:賦予web應用服務器對app/logs或者app/cache目錄讀、寫、創建目錄等權限;第六行命令是:賦予命令行登陸用戶對app/logs或者app/cache目錄讀、寫、創建目錄等權限。
2、如果系統不支持chmod +a ,那麼就使用setfacl命令來設置ACL
首先要確定目錄所在分區支持ACL和已經安裝setfacl命令。
1 $ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` 2 $ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs 3 $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
如果不起作用,在第二、三行命令添加 -n 選項。
3、不使用ACL
如果不是使用ACL,還可以改變umask,使這兩個目錄的用戶組有創建和修改文件的權限(775,並且web應用服務器和命令行用戶在同一個組)或者所有用戶都擁有創建和修改文件的權限(777),但是這兩組權限都是不安全的,給予的權限過高。把下面的代碼添加到app/console
, web/app.php
和 web/app_dev.php
文件的首行。
1 umask(0002); // 生成的目錄(app/cache和app/logs)權限為0775 2 3 // 或者 4 5 umask(0000); // 生成的目錄(app/cache和app/logs)權限為0777
注:php的umask命令是非線程安全的。
4、命令行登陸的用戶和web應用服務器的用戶為同一個用戶。
初學的話就配置個端口號 跟用戶權限就可以了~ 其他不用管