2015-11-22 210 views
2

我試試下面的方法來創建一個文件夾與它的subdirectorys如果它不存在:laravel的mkdir()權限被拒絕

public function createFolderIfNotExist($path){ 
    //Check if the folder already exists 
    if(!File::Exists($path)){ 
     //make folder with $path generate recursive with right 0775 
     File::makeDirectory($path, 0775 , true); 
    } 
} 

在運行時localy它工作正常(XAMPP),當推到服務器它返回

權限被拒絕

錯誤的第一線

在Filesystem.php管線337

在HandleExceptions->的HandleError

( '2', 'MKDIR():權限被拒絕', 「/無功/網絡/ **** /供應商/ laravel/framework/src/Illuminate/Filesystem/Filesystem.php', '337',array('path'=> '/ var/www/****/public/images \ product \ 206','mode'= > '509', '遞歸'=>爲真, '力'=>假))

在 MKDIR( '/無功/網絡/ **** /公共/圖像\產品\ 206',' 509', true)在Filesystem.php行337

在 所在文件系統> makeDirectory在Facade.php線( '/無功/網絡/ **** /公共/圖像\產品\ 206', '509',真)216

門面

在 :: __ callStatic在ProductController.php線( 'makeDirectory', 陣列( '/無功/網絡/ **** /公共/圖像\產品\ 206', '509', 真))452

錯誤消息使它看起來像試圖將權限設置爲509

路徑th在我通過的是:

$pathThumb = public_path('images\product\\'.$product->id.'\thumb'); 

當檢查服務器上的許可證時,它說775爲公用文件夾。

enter image description here

我在做什麼錯?

+1

我假設你在服務器上運行* nix。你有沒有檢查你的Selinux是否被禁用? 此外,您必須將目錄所有權設置爲您的apache/nginx運行的組或用戶。您必須運行 chgrp apache產品-Rf 如果您正在運行apache:請檢查httpd.conf中您的服務器運行的用戶和組。 (給予該用戶許可)。 它很可能是您使用不同的FTP用戶上傳文件和不同的用戶的Web服務器 – TrueStory

回答

2

運行php服務器的unix用戶沒有權限訪問$path上的父目錄。

使用谷歌搜索"permission denied" makeDirectoryshows the same

問題出在PHP之外,所以你需要確定如何make the folder writeable like this,或者將文件放在一個可寫入php服務器進程用戶的目錄中。這應該涉及您的系統管理員/ devops人員。