2012-04-05 66 views
3

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

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

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

任何想法为什么上传不能第一次工作?

+1

试试这个:'if!($ create && $ createThumbsFolder)' – hjpotter92 2012-04-05 21:11:31

回答

3

不要听这些人。你的逻辑是好的 - 如果mkdir()任何时候都返回假,那么它会失败。

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

我也想做到这一点(而不是多次调用mkdir()):

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

这将递归创建到文件夹中创建了大拇指所需的所有丢失的目录,我怀疑是你们失败反正。

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

此外,您可能有stat缓存问题。尝试运行clearstatcache()之前​​3210

0

为了进一步跳转青蛙的评论中的答案,它看起来像你可能会在上传前返回,因为你没有抛出一个错误,但只是默默地失败,如果它被认为是没有被创建的文件夹,即使他们是。

如果您认识到$create$createThumbsFolder应该都为true才能继续执行程序,那么您可以测试if语句的逻辑。如果基本上说if (!true || !true),意思是if (false || false),可以简化为if (true),因为如果其中任何一个都是假的,它将返回true。在青蛙的解决方案说if (!(true && true))简化为if (!true)简化为if (false),所以如果这两个值是想要的(和预期)它不会返回。

希望能帮助解释一下逻辑错误,祝你在上传器上好运!

P.S.不要沉默失败!

相关问题