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

Php 如何在移动图像时动态创建文件夹?,php,laravel,file-upload,laravel-5.3,image-uploading,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 = pu

我使用的是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';
        }
    }
}
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => vYcHWLXpwhC9WfXd4XCB2emg83WMtWHphyUBq9MV.jpeg
        )

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

)
执行时存在如下错误:

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';
        }
    }
}
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => vYcHWLXpwhC9WfXd4XCB2emg83WMtWHphyUBq9MV.jpeg
        )

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

)
重命名(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\products\77\NOTFCjMipXwFhBICo1tj6VXP5Qhv92Fg1kmawcUd.jpeg

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

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

更新

$photos的示例阵列结果如下:

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';
        }
    }
}
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => vYcHWLXpwhC9WfXd4XCB2emg83WMtWHphyUBq9MV.jpeg
        )

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

)
使用


我已经试过了。但都是一样的。你能完全更新你的答案吗?所以它可以适应我的case@samuel,更新了我的回答存在如下错误:
mkdir():文件存在
。如果临时文件夹中有2个图像,则只移动了1个图像。应移动2个图像
is_dir()
check。这将消除错误。请立即尝试关于“2张图片”问题:看起来它们的名称是相同的。