2015-04-23 206 views
1

我有一個laravel資源控制器中的更新控制器功能,它非常基本。正常更新數據庫中的標題,正文等(數據更新沒有問題)。文件重命名不再起作用

問題出在圖像上。我的每個項目的圖像目錄都遵循一個基於項目標題的命名約定。我構建了更新函數,以便在標題更改後重命名目錄和圖像。我一建立它就能正常工作,但它突然停止。該目錄重命名,但文件沒有。這裏是控制器的相關代碼片段:

$count = 0; 
    $slug = Input::get('title'); 
    $prefix = Str::slug($slug); 
    $oldPrefix = $project->imagesprefix; 
    $path = public_path().'/img/projects/'; 
    $directory = $path . $prefix; 

    rename($path.$oldPrefix, $directory); 

    //dumped directory here and it's definitely set 
    $files = preg_grep('~\.(jpg)$~', scandir($directory)); 

    //dumped $files here and the array is definitely set 
    foreach($files as $file){ 
     rename($directory.'/'.$file, $directory.'/'.$prefix.'-'.$count.'.jpg'); 
     ++$count; 
    } 
    rename($directory.'/thumbnails/'.$oldprefix.'-thumb.jpg', $directory.'/thumbnails/'.prefix.'-thumb.jpg'); 

所有這些在今天下午測試時工作正常。現在它更新數據庫,重命名目錄文件夾但無法重命名文件。我已經在循環之前轉儲了$ files和$ directory,並且它們都被設置了。

+2

你檢查過文件權限嗎? 'ls -l' – Alupotha

+0

就是這樣。我可以坐在那面一年,甚至沒有想到它。每次重命名目錄後,你是否必須重置權限?我曾創建了一個0777,我認爲它將保持不變。 –

回答

0

如果文件重命名失敗,那麼這通常與權限有關。

+0

問題在於動態創建的圖像上傳目錄。創建時我將它設置爲777,但它不適用這些奇怪的權限。它一直只應用只讀。我只需要深入研究一下Laravels的'File :: makeDirectory()'方法,看看它是如何工作的。我沒有做任何不尋常的事情,只是通過了昨天早上工作正常的方法和許可。 –