0

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

4

3 回答 3

3

很抱歉,但我觉得您正在尝试上传具有相同变量名的所有 3 个文件?这是正确的吗?但这不起作用,因为它们会相互覆盖。我认为使用类似的东西会更好更清洁的方式

    $i = 0;
    foreach($_FILES['addFile'.$i] as $addFile) {
     if(!empty($addFiles) {
        move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY');
     }
      $i++;
   }
于 2008-12-11T11:50:28.817 回答
1

相关,但可能无济于事:但是 move_uploaded_file 是一种(稍微)更好的处理上传文件的方法,而不是复制。

任何文件都很大吗?PHP 对文件大小和上传文件的时间有限制......

最好把你送到这里,而不是试图写下它所说的:

http://uk3.php.net/manual/en/features.file-upload.common-pitfalls.php

于 2008-12-11T11:28:44.180 回答
1

您的循环逻辑不正确。您直接在文件输入名称上使用了 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];
         }
     }
}

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

于 2008-12-11T11:34:54.980 回答