php的上传问题,困扰了好久。情况是这样的
php.ini 限制了 upload 和 post 的最大数据 都是4m ,execution time 采用默认 30. 我以为上传大文件的时候,会在达到最大值(4M)或者超过execution time 时,脚本断掉,或者打印什么错误,可是php必须等整个文件到了服务器才能报错。 这样的话,如果上传100mb 的文件,那就得等很久。同时,在apache的error log 里,能看到,类似的warning ;
PHP Warning:  POST Content-Length of 2835927 bytes exceeds the limit of 2097152 bytes in Unknown on line 0, referer: http:。。
这个警告 在 文件没有 完全到服务器的时候,就能在error_log 里看到,所以,我想 是不是有办法 在文件(100mb)没完全到服务器的时候,php脚本就能捕获那个警告,那样,就可以断掉上传了,我找了很久,不知道怎么做,trigger_error 也不知道 在什么时候触发。还有,apache 的上传允许大小 我没有限制,如果我限制,我得到就是 服务器 error了,不是我想要的 php的error ,我想得到php返回的文件大小超过设定的错误。请问有人懂吗?在php端,怎么在文件不完全到服务器的时候,判断文件超出预设值?多谢多谢

解决方案 »

  1.   

    用javascript在本地判断文件大小。自行baidu
      

  2.   

    别开玩笑了,javascript 会被杀毒软件杀掉的,你没有权限读用户本地文件的。
      

  3.   

    查看一下php5上传进度的pecl,看看有没有点帮助.
      

  4.   


    能获取HTTP请求标头的Content-Length最好。
      

  5.   

    我上传文件到一个文件,这个文件头 这么处理,可是这些不会执行的。必须等文件全部到了。
    // Check post_max_size 
    $POST_MAX_SIZE = ini_get('post_max_size');
    $unit = strtoupper(substr($POST_MAX_SIZE, -1));
    $multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1))); if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
    echo POST_MAXIMUM_ERROR;
    exit(0);
    }
      

  6.   

    使用 upload_progress 扩展. 在第一次请求AJAX数据时,得到总大小. 客户端判断总大小,以确定是否显示出错信息.自己去看官方demo