0

我的网站上有一个功能,用户可以创建相册以更好地组织他们的照片。他们可以上传新照片,也可以从已上传的照片中进行选择。在我的 PHP 中,如果他们上传了任何新文件,我的代码会遍历他们上传的文件。它工作得很好,但我只希望它在他们实际上传新照片时工作。现在,即使他们选择了已经上传的旧照片,它也会运行。我正在使用 HTML5“multiple”属性,以便他们可以上传多张照片。在我的 PHP 中,如何编写条件 if 语句以仅在他们上传照片时运行此代码?

foreach ($_FILES['uploads']['name'] as $key => $file) {
   $time= time();
   $target= UPLOADPATH . $time . $file;
   move_uploaded_file($_FILES['uploads']['tmp_name'][$key], $target);
}

我试过使用:

if ($_FILES['uploads']['size'] != 0)
if ($_FILES != 0)
if ($_FILES['upload']['name'] !=0)

但是,到目前为止还没有成功。我能做些什么?我究竟做错了什么?

谢谢

更新

我最终将变量设置为 $_FILES 数组中第一个元素的值。

像这样:

$file_test= $_FILES['uploads']['size']['0'];

然后我在测试条件下使用它:

($file_test != 0) { 
    // run the code;
}

谢谢大家的帮助!!

4

3 回答 3

2

我猜您将已经上传的照片存储在任何地方,然后您可以使用组合getimagesize()功能(PHP手册)来检查上传的文件是否为图像。md5_file()然后使用该函数(PHP 手册)将上传文件的 MD5 哈希值与存储的文件进行比较。如果它们存储在数据库中,将每个文件的 MD5 直接存储在一个字段中可能会提高性能,因此您可以轻松地查询数据库以获取现有的 MD5 哈希。

希望这可以帮助。

于 2012-10-19T18:58:17.230 回答
1

首先你必须使用这个函数重新排列你的 $_FILES 数组

function rearrange( $arr ){
        foreach($arr as $key => $items){
            foreach($items as $i => $val){
                $array[$i][$key] = $val;
            }
        }
        return $array;
}

$files = rearrange($_FILES['uploads']);

//Then do the foreach loop upload

if(!empty($files))
{

    foreach ($files as $file) {
     // Check the file size inside the foreach loop
     if($file['size'] > 0)
     {
       $time= time();
       $target= UPLOADPATH . $time . $file['name'];
       move_uploaded_file($file['tmp_name'], $target);
     }
    }

}
于 2012-10-19T19:19:26.530 回答
0
if(!empty($_FILES)){
    // you've got files?!?!
}

幸运的猜测在这里,真的不明白你的问题。

于 2012-10-19T18:52:20.780 回答