3

我的网站上有一个简单的图片上传表单,用户可以一次上传多张图片。我想让我的图像根据月份和年份按以下格式组织在文件夹中: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");

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

4

2 回答 2

3

不要听这些人的。你的逻辑很好——如果mkdir()任何时候都返回 false,那么它应该会失败。

但是,正如 mazzzzz 所建议的那样,在这种情况下我会抛出一个异常,而不是返回 false。

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

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

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

如果不是这种情况,那么不知何故您没有权限,如果您可以上传文件,这似乎不太可能。

此外,您可能有统计缓存问题。尝试clearstatcache()之前运行do_upload()

于 2012-04-06T02:23:09.020 回答
0

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

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

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

PS不要沉默失败!

于 2012-04-06T01:57:47.747 回答