如何在移动图像时动态创建文件夹?

时间:2017-06-01 18:00:34

标签: php laravel file-upload laravel-5.3 image-uploading

我使用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 \存储\ TEMP \ NOTFCjMipXwFhBICo1tj6VXP5Qhv92Fg1kmawcUd.jpeg,C:\ XAMPP \ htdocs中\ myshop \公共\ IMG \产品\ 77 \ NOTFCjMipXwFhBICo1tj6VXP5Qhv92Fg1kmawcUd.jpeg):   该系统找不到指定的路径。 (代码:3)

我认为发生错误是因为$ id文件夹是动态生成的。 $ id文件夹取决于参数id。如果参数id = 77,它将形成如下:

  

C:\ XAMPP \ htdocs中\ myshop \公共\ IMG \产品\ 77 \ NOTFCjMipXwFhBICo1tj6VXP5Qhv92Fg1kmawcUd.jpeg

因为文件夹77尚不存在而发生错误

如何在移动图像之前先制作文件夹77(这是动态生成的)?

更新

来自$照片的示例数组结果如下:

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

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

)

1 个答案:

答案 0 :(得分: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';
        }
    }
}