2017-06-01 94 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个图像移动 –