PHP文件上传问题

PHP文件上传问题,php,file-upload,Php,File Upload,我的PHP脚本有一个非常奇怪的问题 我上传了几个文件,让PHP把它们都放在一个文件夹中。 我遇到了随机文件被发送和随机文件不被发送的问题。所以我调试了它,从$\u FILES[]数组中得到了一个非常奇怪的结果 我试了3个文件 $\u FILES[“addFile”][“name”]保存3个文件的名称 您希望$\u FILES[“addFile”][“tmp\u name”]保存PHP用于复制文件的3个临时名称,但它没有。它只有一个名字。另外2个是空字符串,在上传时会产生错误(我禁止显示) 这很奇

我的PHP脚本有一个非常奇怪的问题

我上传了几个文件,让PHP把它们都放在一个文件夹中。 我遇到了随机文件被发送和随机文件不被发送的问题。所以我调试了它,从$\u FILES[]数组中得到了一个非常奇怪的结果

我试了3个文件

$\u FILES[“addFile”][“name”]
保存3个文件的名称

您希望
$\u FILES[“addFile”][“tmp\u 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_名称为空,if值将为false,因此它将跳过die()函数

有人知道这是什么原因吗


进一步信息:我正在使用WindowsXP,运行WAMP服务器。以前从未遇到过这个问题,我可以访问我尝试上载的所有地图。我认为windows的安全设置不是问题。

相关,但可能不会有帮助:但移动上传的文件比复制更好(略)

有大文件吗?PHP对文件大小和上载时间有限制

最好把你送到这里,而不是试图写下上面的内容:


相关,但可能不会有帮助:但移动上传的文件比复制更好(略)

有大文件吗?PHP对文件大小和上载时间有限制

最好把你送到这里,而不是试图写下上面的内容:


您的循环逻辑不正确。您直接在文件输入名称上使用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];
         }
     }
}
if(!empty($_FILES['addFile'])和&is_数组($_FILES['addFile']['name'])){
$length=计数($_文件['addFile']['name']);
对于($i=0;$i<$length;$i++){
$result=move_-upload_-file($_-FILES['addFile']['tmp_-name'][$i],$baseDir./'$_-FILES['addFile']['name'][$i]);
如果($result==false){
echo“文件上载失败。出现以下错误:”.$\u文件['addFile']['error'][$i];
}
}
}

检查错误代码如果您仍然有问题,它应该提供调试它所需的所有信息。

您的循环逻辑不正确。您直接在文件输入名称上使用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];
         }
     }
}
if(!empty($_FILES['addFile'])和&is_数组($_FILES['addFile']['name'])){
$length=计数($_文件['addFile']['name']);
对于($i=0;$i<$length;$i++){
$result=move_-upload_-file($_-FILES['addFile']['tmp_-name'][$i],$baseDir./'$_-FILES['addFile']['name'][$i]);
如果($result==false){
echo“文件上载失败。出现以下错误:”.$\u文件['addFile']['error'][$i];
}
}
}

如果您仍有问题,请检查错误代码,它应提供调试所需的所有信息。

很抱歉,您试图上载具有相同变量名的所有3个文件,对吗?是这样吗? 但这不会起作用,因为它们会相互覆盖。 我认为更好的清洁方式是使用类似

    $i = 0;
    foreach($_FILES['addFile'.$i] as $addFile) {
     if(!empty($addFiles) {
        move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY');
     }
      $i++;
   }

我很抱歉,但它告诉我,你正试图上传所有3个文件与相同的变量名?是这样吗? 但这不会起作用,因为它们会相互覆盖。 我认为更好的清洁方式是使用类似

    $i = 0;
    foreach($_FILES['addFile'.$i] as $addFile) {
     if(!empty($addFiles) {
        move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY');
     }
      $i++;
   }

确实是文件大小限制对我造成了影响。Cursus,我必须看看如何克服这个问题。确实是文件大小限制对我造成了影响。Cursus,我得看看如何克服这个问题。他可以使用数组变量名(addFile[])上传它们。他可以使用数组变量名(addFile[])上传它们