繁体   English   中英

PHP文件上传麻烦

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM