我的PHP脚本非常奇怪。
我上传了几个文件并让PHP将它们全部放在一个文件夹中。 我发送随机文件时遇到问题,随机文件没有被发送。所以我调试了它,我从$ _FILES []数组得到了一个非常奇怪的结果。
我尝试了3个文件。
$_FILES["addFile"]["name"]
保存3个文件的名称。
您希望$_FILES["addFile"]["tmp_name"]
保存PHP用于复制文件的3个临时名称,但事实并非如此。它只有一个名字。另外2个是空字符串,在上传时会产生错误(我从显示中产生了压力)
这很奇怪。我已经尝试了多种情况,它一直在发生。 这必须是我的设置或甚至我的代码。
这是我的代码:
$i = 0;
if (!empty($_FILES['addFile'])) {
foreach($_FILES['addFile'] as $addFile) {
$fileToCopy = $_FILES["addFile"]["tmp_name"][$i];
$fileName = $_FILES["addFile"]["name"][$i];
$i++;
if(!empty($fileToCopy)){
$copyTo = $baseDir."/".$fileName;
@copy($fileToCopy, $copyTo) or die("cannot copy ".$fileToCopy." to ".$copyTo);
}
}
exit(0);
}
由于tmp_name为空,if-value将为false,因此它将跳过die()函数。
有人知道可能导致这种情况的原因吗?
进一步信息:我正在使用Windows XP,运行WAMP服务器。从来没有遇到过这个问题,我可以访问我试图上传的所有地图。 Windows的安全设置不是我认为的问题。
答案 0 :(得分:3)
我很抱歉,但是我试图上传所有3个具有相同变量名称的文件?这是正确的吗? 但这不起作用,因为它们会相互覆盖。 我认为使用像
这样的东西会更好一些 $i = 0;
foreach($_FILES['addFile'.$i] as $addFile) {
if(!empty($addFiles) {
move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY');
}
$i++;
}
答案 1 :(得分:1)
Relevent,但可能没有帮助:但move_uploaded_file是一种(稍微)更好的方式来处理上传的文件而不是复制。
是否有大文件? PHP对文件大小以及上传它们所花费的时间有限制......
最好把你送到这里,而不是试图写下它的内容:
http://uk3.php.net/manual/en/features.file-upload.common-pitfalls.php
答案 2 :(得分:1)
您的循环逻辑不正确。您直接在文件输入名称上使用foreach循环,它存储了您不感兴趣的几个属性('type','size'等)。
您应该从第一个文件中获取文件计数并将其用作循环长度:
if (!empty($_FILES['addFile']) && is_array($_FILES['addFile']['name'])) {
$length = count($_FILES['addFile']['name']);
for($i = 0; $i < $length; $i++) {
$result = move_uploaded_file($_FILES['addFile']['tmp_name'][$i],$baseDir."/" . $_FILES['addFile']['name'][$i]);
if($result === false) {
echo 'File upload failed. The following error has occurred: ' . $_FILES['addFile']['error'][$i];
}
}
}
如果您仍然遇到问题,请检查错误代码,它应该提供调试它所需的所有信息。