0

我有这段代码:

  for($d = 0 ; $d < count($_FILES['uploadedfile']['name']) ; ++$d)
  { $imagenamecount = $d + 1;
    $imagedetails = pathinfo( $_FILES['uploadedfile']['name'][$d]);
    $finalpathfortempimagefile = $pathfortempimagefile."image"."$imagenamecount".".".$imagedetails['extension'];
    if(!move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$d], $finalpathfortempimagefile))
    { 
      header('Location: http://localhost/stuff.php?ue=xx');
    }
  }

它的主要部分围绕使用move_uploaded_file()重命名和传输多个上传的图像。我在 Chrome、Firefox 和 Opera 上都没有问题。但是当我在 Safari 上测试它时,它header('Location: http://localhost/stuff.php?ue=xx');被激活了。(还没在IE上测试过,打不开。)

我在上面提供的代码之前有处理上传文件(检查扩展名等)的代码,但它没有问题,没有错误或其他任何问题。Safari 的文件上传表单也没有问题:

<form enctype="multipart/form-data" action="post.php" method="POST">
<input id="uploadInput" name="uploadedfile[]" type="file" multiple>
<input class="submit_css" type="submit" value="PREVIEW POST">
</form>

所以我认为它确实与 move_uploaded_file() 函数有关。有任何想法吗?

额外的:

用 Safari 再次测试,但这次只有 1 张图片,测试成功,没有错误。

再次测试它,但多次上传(2 和 5),测试不成功,它被重定向。

在其他浏览器上尝试了这两个测试,测试成功。

没有在IE上尝试过,但仍然无法打开它。


编辑

为了这篇文章的任何未来观众的利益。

这不是 move_uploaded_file() 的 php 问题 - 我刚刚确认这实际上是 html5 多重属性上的 SAFARI v5.1.+ BUG。这里信息很少

4

1 回答 1

1

这行得通吗?

<?php

$finalpath = $_SERVER['DOCUMENT_ROOT'].'/image/';

$errors = array();

foreach ($_FILES["uploadedfile"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["uploadedfile"]["tmp_name"][$key];
        $name = $_FILES["uploadedfile"]["name"][$key];
        if(!move_uploaded_file($tmp_name, "$finalpath.$name")){
          //header('Location: /stuff.php?ue=xx');
          $errors[]="Problem moving file to $finalpath.$name";
        }
    }
}

if(empty($errors)){
  //success
} else {
  print_r($errors);
}
?>
于 2013-03-28T17:52:49.570 回答