<?php
header('Content-Type: text/html; charset=GBK');
echo '<pre>';
print_r($_FILES);
echo '</pre>';
echo  '<br/>';
if ($_FILES['userfile']['error'] > 0) {
switch ($_FILES['userfile']['error']) {
case 1: echo "<script>alert('上传文件超过约定值1');history.back();</script>";
break;
case 2: echo "<script>alert('上传文件超过约定值2');history.back();</script>";
break;
case 3: echo "<script>alert('部分被上传');history.back();</script>";
break;
case 4: echo "<script>alert('没有任何文件被上传');history.back();</script>";
break;
}
exit;
}
if(is_uploaded_file($_FILES['userfile']['tmp_name']))
{
if(!move_uploaded_file($_FILES['userfile']['tmp_name'],'uploads/'.$_FILES['userfile']['name']))
{
echo "<script>alert('移动失败!');history.back();</script>";
exit;
}

}else {
echo "<script>alert('临时文件夹找不到上传的文件');history.back();</script>";
exit;
}
echo "<script>alert('文件上传成功!');location.href='Demo3.php?url=".$_FILES['userfile']['name']."';</script>";
?>为什么上传小文件就能正确上传,并且能显示$_FILES的全部信息,但是上传大文件时候,不会显示S_FILES信息,打印出是“Array()”,而且能绕过if ($_FILES['userfile']['error'] > 0)语句,直接提示'临时文件夹找不到上传的文件'的信息,请高手解答为什么会出现这个现象?PHP

解决方案 »

  1.   

    你的php.ini 中 max_file_uploads post_max_size memory_limit 这几个参数的值是多少,你上传的文件的大小不能超过这个值。
      

  2.   

    就和楼上说的一样,你上传的文件超过了INI里最大文件的大小限制,这种情况下文件时传不上去的,也就是$_FILES['name']会是空数组,当然$_FILES['name']['error']就不会大于0,就直接跳到后面去了最好的解决办法是切割上传,不要一次性全部上传,可以用ajax来分割文件
      

  3.   


    怎么算是分割上传呀?把文件按二进制分割,最后通过APPEND追加的方式,把这些分割的小块文件再组合起来
      

  4.   


    怎么算是分割上传呀?把文件按二进制分割,最后通过APPEND追加的方式,把这些分割的小块文件再组合起来那通过什么手段,把上传的文件转换成二进制了,能把代码贴一下吗?
    求加PHP群:45503780
      

  5.   

    问题解决了,我的php文件居然没 post_max_size 的设置,我加上了就对了,但是我不知道为什么没有 post_max_size ,在传大文件时候$_FILES的返回值会是"Array()"?有知道的大侠能解释一下吗?
      

  6.   

    没有设置 post_max_size ,则它就会用默认值8M,你的大文件肯定超过了8M,所以$_FILES就会为空。