【发布时间】:2013-04-02 22:33:22
【问题描述】:
我有这段代码:
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。信息很少here
【问题讨论】:
-
php 代码是在服务器端执行的,我认为这与浏览器无关。您在日志中看到任何错误吗?
-
@romainberger 是的,但这只是发生在 safari 上。我刚刚对其进行了测试,但只有一张图像并且没有任何问题,它可以工作,但是当我再次使用多张图像对其进行测试时,它会重定向。其他浏览器的一切都运行顺利。 (仍然不知道 IE)错误日志说没有价值。
-
您的 HTML 表单元素是否将
enctype属性设置为multipart/form-data? -
是的。我将添加表单的代码。
-
尝试将浏览器发送的所有标头转储到日志文件中。请注意浏览器的行为方式。看看你是否发现 Safari 标头有什么奇怪的地方。