[英]PHP file uploading trouble
我的PHP脚本遇到一个非常奇怪的问题。
我正在上传几个文件,并用PHP将它们全部放在一个文件夹中。 我在发送随机文件和不发送随机文件时遇到麻烦。 所以我调试了它,从$ _FILES []数组中得到了一个非常奇怪的结果。
我尝试了3个文件。
$_FILES["addFile"]["name"]
保存3个文件的名称。
您可能希望$_FILES["addFile"]["tmp_name"]
保留PHP用于复制文件的3个临时名称,但事实并非如此。 它只有一个名字。 另外两个是空字符串,在上载时会产生错误(我禁止显示)
这很奇怪。 我已经尝试过多种情况,并且这种情况一直在发生。 这必须是我的设置甚至是我的代码中的内容。
这是我的代码:
$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()函数。
有人知道这可能是什么造成的吗?
进一步的信息:我正在使用运行WAMP服务器的Windows XP。 以前从未遇到过此问题,我可以访问所有尝试上传的地图。 我认为Windows的安全设置不是问题。
抱歉,您似乎正在尝试上传具有相同变量名的所有3个文件? 这是正确的吗? 但这是行不通的,因为它们会相互覆盖。 我认为最好使用一种更清洁的方式
$i = 0;
foreach($_FILES['addFile'.$i] as $addFile) {
if(!empty($addFiles) {
move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY');
}
$i++;
}
释放但可能无济于事:但是move_uploaded_file是一种处理复制文件的(略)好于复制的方法。
是否有大文件? PHP对文件大小及其上载时间有限制...
将其发送给您比尝试写下上面的内容要好:
http://uk3.php.net/manual/en/features.file-upload.common-pitfalls.php
您的循环逻辑不正确。 您直接在文件输入名称上使用了foreach循环,该循环存储了一些您不感兴趣的属性(“类型”,“大小”等)。
您应该从第一个文件中获取文件计数,并将其用作循环长度:
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];
}
}
}
如果您仍然遇到问题,请检查错误代码,错误代码应提供调试所需的所有信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.