2017-06-01 95 views
1

我使用laravel 5.3如何在移動圖像時動態創建文件夾?

我的代碼來移動圖像是這樣的:

private function savePhoto($photos, $id) 
{ 
    foreach($photos as $key => $photo) { 
     $temp = storage_path() . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR . $photo['name']; 
     $destinationPath = public_path() . DIRECTORY_SEPARATOR . 'img'. DIRECTORY_SEPARATOR .'products'.DIRECTORY_SEPARATOR.$id.DIRECTORY_SEPARATOR.$photo['name']; 
     if(rename($temp , $destinationPath)){ 
      echo 'moved!'; 
     } 
     else { 
      echo 'failed'; 
     } 
    } 
} 

在被執行時存在錯誤是這樣的:

重命名(C:\ XAMPP \ htdocs中\ myshop \ storage \ temp \ NOTFCjMipXwFhBICo1tj6VXP5Qhv92Fg1kmawcUd.jpeg,C:\ xampp \ htdocs \ myshop \ public \ img \ products \ 77 \ NOTFCjMipXwFhBICo1tj6VXP5Qhv92Fg1kmawcUd.jpeg): 系統找不到指定的路徑。 (代碼:3)

我認爲發生錯誤是因爲$ id文件夾是動態生成的。 $ id文件夾取決於參數ID。如果參數ID = 77,這將形成這樣的:

C:\ XAMPP \ htdocs中\ myshop \ PUBLIC \ IMG \產品\ 77 \ NOTFCjMipXwFhBICo1tj6VXP5Qhv92Fg1kmawcUd.jpeg

所以發生錯誤的原因文件夾77尚不存在

如何在移動圖像之前首先製作文件夾77(這是動態生成的)?

更新

樣品陣列結果從$照片是這樣的:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => vYcHWLXpwhC9WfXd4XCB2emg83WMtWHphyUBq9MV.jpeg 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => 1STr51oF8cunSsNEJZyS9upI0hNHYMXjLCCSNonz.jpeg 
     ) 

) 

回答

1

使用mkdir()

private function savePhoto($photos, $id) 
{ 
    foreach ($photos as $key => $photo) { 
     $temp = storage_path() . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR . $photo['name']; 

     $idDir = public_path() . DIRECTORY_SEPARATOR . 'img' . DIRECTORY_SEPARATOR . 'products' . DIRECTORY_SEPARATOR . $id; 
     $destinationPath = $idDir . DIRECTORY_SEPARATOR . $photo['name']; 

     if (!is_dir($idDir)) { 
      mkdir($idDir, 0777, TRUE); 
     } 

     if (rename($temp, $destinationPath)) { 
      echo 'moved!'; 
     } else { 
      echo 'failed'; 
     } 
    } 
} 
+0

我不得不嘗試。但它是一樣的。你能完全更新你的答案嗎?所以它適應我的情況 –

+0

@samuel,更新了我的答案 –

+0

存在這樣的錯誤:'mkdir():File exists'。如果臨時文件夾中有2張圖像,只移動了1張圖像。應該有2個圖像移動 –