2008-12-11 99 views
0

我的PHP脚本存在一个非常奇怪的问题。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的值是空的,如果值将是错误的,所以它会跳过die()函数。

有没有人知道可能是什么原因造成的?

更多信息:我正在使用Windows XP,运行WAMP服务器。从未有过这个问题,我可以访问我试图上传的所有地图。 Windows的安全设置不是我想的问题。

回答

1

相关,但可能不会帮助:但move_uploaded_file是处理上传文件的一种(稍微)更好的方式,而不是复制。

是否有任何文件很大? PHP对文件大小,它可以上传他们的时限......

不如你送到这里不是试图写了什么,它说:

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

+0

这确实是,它确实给我的大小限制。 Cursus,我将不得不查找如何克服这一点。 – Vordreller 2008-12-11 11:39:55

+0

我的意思是“curses” – Vordreller 2008-12-11 11:42:23

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

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

3

对不起,但它接缝给我,你试图上传所有3个文件具有相同的变量名?这是正确的吗? 但是这不起作用,因为它们会覆盖对方。 我认为更好的更清洁的方式将是使用类似

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