php文件上传问题
<?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.ini 中 max_file_uploads post_max_size memory_limit 这几个参数的值是多少,你上传的文件的大小不能超过这个值。
------解决方案--------------------就和楼上说的一样,你上传的文件超过了INI里最大文件的大小限制,这种情况下文件时传不上去的,也就是$_FILES['name']会是空数组,当然$_FILES['name']['error']就不会大于0,就直接跳到后面去了
最好的解决办法是切割上传,不要一次性全部上传,可以用ajax来分割文件
------解决方案--------------------没有设置 post_max_size ,则它就会用默认值8M,你的大文件肯定超过了8M,所以$_FILES就会为空。