我的网站上有一个简单的图片上传表格,用户可以一次上传多张图片。我希望我的图像根据月份和年份按照以下格式组织在文件夹中: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");
为什么上传第一次不起作用的任何想法?
答案 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。不要沉默失败!