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

时间:2012-04-05 20:55:38

标签: php codeigniter

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

问题是如果当前月份的文件夹不存在并且我尝试上传图像,则表示当前月份的文件夹已正确创建,但之后没有上传图像。但是如果文件夹已经存在,则可以毫无问题地上传所有图像。这是我的代码:

    $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");

为什么上传第一次不起作用的任何想法?

2 个答案:

答案 0 :(得分:3)

不要听这些家伙。你的逻辑很好 - 如果mkdir()在任何时间返回false,那么它应该失败。

然而,正如mazzzzz所暗示的那样,我会在这种情况下抛出异常,而不是返回false。

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

<?php
mkdir($pathToUpload . '/thumbs', 0777, TRUE);

这将递归创建创建thumb文件夹所需的所有缺少的目录,我怀疑这是你失败的地方。

如果情况并非如此,那么你就没有特权,如果你可以上传文件,这似乎不太可能。

此外,您可能遇到了stat缓存问题。尝试在clearstatcache()

之前运行do_upload()

答案 1 :(得分:0)

要在评论中进一步了解Jumping Frog的答案,看起来你可能会在上传之前返回,因为你没有抛出错误,但是如果认为没有创建文件夹就会默默地失败,即使它们是

如果您意识到$create$createThumbsFolder都应该为程序继续,那么您可以测试if语句的逻辑。 if基本上表示if (!true || !true),意思是if (false || false),可以简化为if (true),因为如果其中任何一个为假,则返回true。如果Frog的解决方案将if (!(true && true))简化为if (!true)简化为if (false),那么如果两个值都是想要的(并且是预期的)它将不会返回。

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

P.S。不要沉默失败!