不知道为什么在上传大文件的时候如果文件大小超过了我设置的最大值就会出现POST数组为空的情况 本来应该只是显示提示说文件太大了,但是却成了提示$POST里的是空的.
我已经在php.ini里把各种max和memory设置成很大的值了。。所以应该不会是php.ini设置问题,因为如果我把大小比较那行代码去掉就可以运行<?php
session_start();
include_once("classe/image.php");
include_once("mysql_connect.php");


$message = NULL; if(isset($_POST["anti_multipl"]))
{
if($_SESSION["anti_multipl"]==$_POST["anti_multipl"])
{
if(isset($_FILES["new_file"]))
{
if($_FILES['new_file']['size'] <= $_SESSION["maxUpload"])//文件大小要限制
{
if($_FILES["new_file"]["error"]==0)
{

//防止重复的名字,给新文件重命名
$path="uploaded/".$_SESSION["userName"]."/";

$i= strlen($_FILES["new_file"]["name"]);
while($_FILES["new_file"]["name"][$i-1] != '.' && $i!=0)
$i--;

$file_name = $i>0?substr($_FILES["new_file"]["name"], 0, $i-1 ):$_FILES["new_file"]["name"];
$file_type = strrchr($_FILES["new_file"]["name"],'.');

$query = "SELECT f_name FROM uploaded WHERE (f_name LIKE '{$file_name}(%)%' OR f_name = '{$_FILES['new_file']['name']}') AND client_id= {$_SESSION['userID']};";
$result = mysql_query($query);
if(mysql_num_rows($result)>=1)
{
$i= strlen($_FILES["new_file"]["name"]);
while($_FILES["new_file"]["name"][$i-1] != '.' && $i!=0)
$i--;
$_FILES["new_file"]["name"] = $file_name."(".(mysql_num_rows($result)).")".$file_type;
}
//插入文件
$query = "INSERT INTO uploaded(client_id, f_name, f_path, f_size, f_timestamp, f_desc) VALUES({$_SESSION['userID']}, '{$_FILES['new_file']['name']}', '{$path}', {$_FILES['new_file']['size']}, now(), '{$_POST['desc']}');";
mysql_query("START TRANSACTION;");
if(mysql_query($query))
{
if(move_uploaded_file($_FILES["new_file"]["tmp_name"], $path.$_FILES["new_file"]["name"]))
{
mysql_query("COMMIT;");
$message = "OK";
}
else
{
mysql_query("ROLLBACK;");
$message =  "Deplacement de ficher erreur: \nverifiz bien le nom de votre fichier s'il contient des caracteres specieux";
}
}
else
{
mysql_query("ROLLBACK;");
$message .=  "insertion fichier erreur:".mysql_error();
}
}
else
{
$message .=  "Upload file error:".$_FILES["new_file"]["error"];
}
}
else
{
$message .= "文件大于 ".$_SESSION["maxUpload"]/1024/1024 ."Mb";

}
}
else
{
$message .=  "文件无法上传:".$_FILES["new_file"]["error"];
}
}
else
{
$message .= "Anti miltible dosent correct";
//header("LOCATION:mySpace.php");//si l'utilisateur essaie de valider XX fois la fromule
}
}
else
{
$message .=  "The anti multipl isn't in '$_POST': " .count($_POST);//如果文件太大这里就会是0
}
$_SESSION["anti_multipl"] = mt_rand(0,999999999);
session_write_close();
?>
<script type="text/javascript">
window.top.window.uploadEnd("<?php echo $message; ?>");
</script>
//////////////////---------------我是分割君-----------------------/////////////////还有一个问题就是.....突然想不起来了等想起来再说

解决方案 »

  1.   

    超过了你设置的大小自然就进入else分支了。有可疑问的?
    $_POST没有值。是你的文件大小超过了post_max_size的值了把。
      

  2.   

    1.首先修改执行上传文件限制一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完.
    但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行.
    这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time在php.ini里查找
    max_execution_time
    默认是30秒.改为
    max_execution_time = 0
    0表示没有限制另一种方法是可以在php程序中加入
    set_time_limit();
    来设定页面最久执行时间.
    set_time_limit(0);//0表示没有限制2.其次修改数据包的最大限制修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到文件上传。
    php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便会为空.
    查找 post_max_size .改为
    post_max_size = 150M3. 最好修改上传文件的最大限制很多人都会改了第二步.但上传文件时最大仍然为 2M.
    为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。
    查找upload_max_filesize,默认为8M改为
    upload_max_filesize = 100M另外要说明的是,post_max_size 大于 upload_max_filesize 为佳
      

  3.   

    LS的怎么都不看清楚就直接回贴呢。。说了各种设置的值都很大,postmax我设置成2048m,
    所以应该不会超过设置大小,但是post数组里却是空的
      

  4.   

    本帖最后由 xuzuning 于 2012-04-03 16:08:11 编辑
      

  5.   

    表单是这样的, 如果我把上面的if($_FILES['new_file']['size'] <= $_SESSION["maxUpload"])//文件大小要限制这行代码去掉的话POST就不会是空,而且也能上传,真的很奇怪 <fieldset>
    <form method="POST" enctype="multipart/form-data" action="mySpace_addFile.php" target="frameForUpdate">
    Upload a new file:<input type="file" id="file" name="new_file" /></br>
    <textarea rows="4" cols="60" name="desc" value=""></textarea>
    </br>
    <input type="submit" id="submit" value="Add new file"/>
    <input type="hidden" name="anti_multipl" id="anti_multipl" value="<?php echo $_SESSION["anti_multipl"]; ?>"/>
    </form>
    </fieldset>
    <iframe name="frameForUpdate" id="frameForUpdate"></iframe>
      

  6.   

    只要大于$_SESSION["maxUpload"]就会出错, 这个值我是在数据库里设置的,每次登录后就放到SESSION里,如果我把maxUpload设成很大也不会出错。
      

  7.   

    对了,我想起来另外一个问题是什么了如何才能用javascript操作地址栏里的参数呢???比如一个地址:
    http://index.php?a=x&b=y&c=z
    怎么样才能做到直接替换地址里的参数呢?
    我用string的replace正则表达式好像是错的
    url.replace(/a=.*[&]?/,"c");
      

  8.   

    那可能是你的程序控制了吧,session 与提交并无直接关系
      

  9.   

    <script>
    url = 'http://index.php?a=x&b=y&c=z';
    url = url.replace(/(a=).*?(&|$)/,"$1c$2");
    alert(url);
    </script>
      

  10.   

    因为你上传的文件总和超过了php.int里面 post_max_size的最大值,只要post表单超过这个值,服务器接收post值和file值都为空,你可以自己尝试下。我也碰到这问题、、、举个例子1 :假如你上传的文件是220M  你设置 upload_max_filesize = 200M  post_max_size=250M
    那么它会返回 错误代码 1 ,也就是上传超过了 upload_max_filesize 值  ,这样post接收值也没问题例子2:
    假如你上传的文件是280M  你设置 upload_max_filesize = 200M  post_max_size=250M
    超过了post接收的值,那么post和files 文件接收都会返回空数组 ,错误代码 是 0 ,数据上传成功.因为数据位空没有内容 所以就显示 0 了,好神奇那么就只有把 post_max_size 设置的足够大,不然别人上传个大型文件,那不就是说error判断是无效的吗、、、
    不知道这算不算bug 、、、、
    我也是碰到了这问题
    post 总是大于 upload 的 ,因为表单中还有其他信息
      

  11.   

    post_max_size 最大不能超过内存大小、、、、、