2015-10-17 18 views
0

與此代碼,如果文件存在,它會給我錯誤的Filesystem.php線338Laravel 5文件門面不執行下一個代碼if語句假

ErrorException上:mkdir():文件存在

,而不是執行下一個代碼,這將插入用戶表

..... 
if(!File::exists($path.$data['avatar']->getClientOriginalName())){ 
    File::makeDirectory($path, 0755, true); 
    Image::make($data['avatar']->getRealPath())->resize(200, 200)->save($path.$data['avatar']->getClientOriginalName()); 
    Post::create([ 
      'user_id' => Auth::user()->id, 
      'content' => "assets/uploads".date('/Y/m/d/').$data['avatar']->getClientOriginalName(), 
      'type' => 'image' 
     ]); 
} 
$user = new User; 
$user->username = $data['username']; 
$user->password = Hash::make($data['password']); 
$user->avatar = "assets/uploads".date('/Y/m/d/').$data['avatar']->getClientOriginalName(); 
$user->email = $data['email']; 
$user->first_name = $data['first_name']; 
$user->last_name = $data['last_name']; 
$user->role_id = $data['level']; 
$user->save(); 
.... 

AFAIK上面的代碼if語句真或假的應該執行插入,我應該使用else聲明?如果是這樣,那麼我必須重複插入用戶兩次,這是不好的。

所以,問題是爲什麼上面的代碼返回錯誤,而不是執行下一個代碼?以及如何解決它?

+0

我敢肯定,問題是你在if語句中給出的路徑,請仔細檢查一次。在某處迴應它並檢查。你可能會在那裏使用一些不需要的路徑。 –

+0

@ParthapratimNeog ahhh ..感謝在創建目錄之前缺少一些邏輯,請參閱我自己的答案。 –

回答

0

缺少一些邏輯之前創建目錄,這裏是我的解釋

此代碼將檢查是否路徑文件名不存在,那麼做一些事情。

!File::exists($path.$data['avatar']->getClientOriginalName() 

並在下面的代碼的錯誤中斷。

File::makeDirectory($path, 0755, true); 

問題1

我應該使用else語句?如果是這樣,那麼我必須重複插入用戶 兩次,這是不好的。

根本沒有,你只是在創建目錄之前缺少一些邏輯。

問題2

爲什麼上面的代碼返回錯誤,而不是執行下面的代碼?以及如何 來解決它?

你跟我開玩笑路徑文件名不存在並不意味着路徑不存在,也可以只是不存在,所以請,如果你的確保路徑不存在,則與你的情況不存在創建文件夾,反正但路徑是存在的,但你叫File::makeDirectory()那麼這就是爲什麼你會

結束

ErrorException在Filesystem.php線338上:mkdir():文件存在

這裏是一個解決方法,同步使用此代碼。

... 
if(!File::exists($path)){ 
    File::makeDirectory($path, 0755, true); 
} 
...