PHP文件上传麻烦

时间:2008-12-11 11:23:12

标签: php file-upload

我的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的安全设置不是我认为的问题。

3 个答案:

答案 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];
         }
     }
}

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