2019年8月26日 星期一

Laravel log / storage could not be opened: failed to open stream

參考:https://sjkou.net/2016/07/30/how-to-install-laravel5-on-centos7/

除了資料夾權限是設定成 chmod 777 的指令之外:

chmod -R 777 storage

導致此問題發生的原因還有  SELinux


SELinux導致

觀察主機目前是否有啟動 selinux (CentOS 預設是有啟動 selinux)
getenforce 


暫時性的關掉或開啟 selinux
setenforce 0

開啟
setenforce 1

以下步驟請都做:

(一)
因為有使用 selinux 而你新增了一些檔案或目錄到「網頁目錄 /var/www/html」,明明檔案就存在,卻無法正常從瀏覽器觀看,這不是 file permission chmod 的問題,是 selinux 檔案 http 存取權限的問題,你只需要用 使用SELinux允許使用此命令寫入文件

在對應資料夾下使用此指令
sudo chcon -R -t httpd_sys_rw_content_t 我的專案名稱/storage



(二)
對網站加入 apache 所有權,在 Laravel 網站的根目錄下執行:
sudo chown -R apache:apache *  
<-FTP上傳檔案可能會有使用者權限問題  
(三)
CentOS 對內部檔案的權限管理非常嚴謹,當其他使用者在看網頁時,CentOS 內其實是有一名叫做 apache 的使用者在瀏覽您的網頁目錄,雖然如此但 apache 也不是什麼檔案都能看,僅能觀看httpd 相關權限的檔案而已,在還沒修改網站權限時你可以透過 ls -Z 來取得目前的權限。
但是 httpd_sys_content_t 僅是瀏覽的權限而已,依據 laravel 的安裝說明bootstrap/cache 及 storage 這兩個資料夾必須要有寫入的權限,所以需再做以下修改:

sudo chcon -Rv -t httpd_sys_rw_content_t 網站/storage 
sudo chcon -Rv -t httpd_sys_rw_content_t 網站/bootstrap/cache 
sudo chmod -R 777 網站/storage 
sudo chmod -R 777 網站/bootstrap/cache


沒有留言:

張貼留言