在php/codeigniter中创建文件夹并上载图像

在php/codeigniter中创建文件夹并上载图像,php,codeigniter,Php,Codeigniter,我的网站上有一个简单的图片上传表单,用户可以一次上传多张图片。我想让我的图像以以下格式组织在基于月份和年份的文件夹中:月-年,因此每次开始新上载时,我首先检查该文件夹是否存在,如果不存在,则创建一个 问题是,如果当前月份的文件夹不存在,并且我尝试上载图像,则表示当前月份的文件夹将正确创建,但不会上载图像。但是,如果文件夹已经存在,所有的图像都可以上传,没有任何问题。这是我的密码: $folderName = date('m-y'); $pathToUpload = './uplo

我的网站上有一个简单的图片上传表单,用户可以一次上传多张图片。我想让我的图像以以下格式组织在基于月份和年份的文件夹中:月-年,因此每次开始新上载时,我首先检查该文件夹是否存在,如果不存在,则创建一个

问题是,如果当前月份的文件夹不存在,并且我尝试上载图像,则表示当前月份的文件夹将正确创建,但不会上载图像。但是,如果文件夹已经存在,所有的图像都可以上传,没有任何问题。这是我的密码:

    $folderName = date('m-y');
    $pathToUpload = './uploads/photos/' . $folderName;
    if ( ! file_exists($pathToUpload) )
    {
        $create = mkdir($pathToUpload, 0777);
        $createThumbsFolder = mkdir($pathToUpload . '/thumbs', 0777);
        if ( ! $create || ! $createThumbsFolder)
        return;
    }

    $imgName= uniqid('', TRUE);
    $config['upload_path'] = $pathToUpload;
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '9999';
    $config['file_name'] = $imgName . '.jpg';

    $this->upload->initialize($config);
    $upload = $this->upload->do_upload("Filedata");

你知道为什么上传第一次不起作用吗?

为了在评论中进一步说明跳跃蛙的答案,看起来你可以在上传之前返回,因为你没有抛出错误,但是如果认为文件夹没有被创建,即使它们被创建了,也会自动失败

如果您意识到
$create
$createThumbsFolder
都应该为true,则可以测试
If
语句的逻辑。if基本上表示
if(!true | | |!true)
,意思是
if(false | | false)
,可以简化为
if(true)
,因为如果其中一个为false,则返回true。正如Frog的解决方案所说,
if(!(true&&true))
简化为
if(!true)
简化为
if(false)
,因此,如果这两个值都是所需(和预期)的值,则不会返回

希望有助于解释一下逻辑错误,祝上传者好运


注意,不要沉默失败

别听这些家伙的。您的逻辑很好——如果
mkdir()
每次都返回false,那么它应该会失败

然而,正如Mazzzz所建议的,在这种情况下,我会抛出一个异常,而不是返回false

我也会这样做(而不是多次调用
mkdir()
):

试试这个:
如果!($create&&$createThumbsFolder)
<?php
mkdir($pathToUpload . '/thumbs', 0777, TRUE);