PHP / Apache / AJAX - POST限制?

时间:2012-03-13 19:52:01

标签: php jquery ajax apache

我正在尝试通过ajax(jQuery)发送200万字符(非二进制字符串)的POST数据,并且它总是在PHP端显示为空白。这是我的代码:

var string = "<data string that is 2M chars long>";
$.ajax({
    cache: false,
    type: 'POST',
    url: 'data.php',
    data: {'data_string': string}
});

在PHP方面,我收到以下错误消息(尝试从$_POST['data_string']检索数据时):

Notice: Undefined index: data_string in data.php on line ...

我已经检查了php.ini中的post_max_size,它设置为256M,应该绰绰有余吗?我很难过,不确定我做错了什么......

编辑:如果我提取"string"少量数据(例如var string = 'test'),则$_POST["data_string"]会按预期返回test。所以我想知道我是否会在Apache2,PHP或浏览器中达到某种数据限制?我正在使用Google Chrome 17.0.963.79

EDIT2:php.ini中的memory_limit = 256M

EDIT3:php.ini中的max_input_time = -1

EDIT4:var_dump($ _ POST)返回Array(0)

EDIT5:在debian squeeze上运行PHP5的最新稳定版本:PHP 5.3.3-7 + squeeze8 with Suhosin-Patch(cli)(内置:2012年2月10日14:12:26)

5 个答案:

答案 0 :(得分:28)

您必须检查您和服务器之间所有项目的限制参数。代理服务器很难,但至少你可以检查:

的Apache:

  • LimitRequestBody,默认情况下约为2Gb,64位可能更高,请查看错误日志以获取详细信息。

PHP:

如果你已达到Apache的编译限制,你唯一的解决方案就是避免直接扣除如此庞大的数据块,你必须把它分成几块。

答案 1 :(得分:3)

您也可以查看suhosin.ini设置,例如:

suhosin.post.max_value_length = 65000

答案 2 :(得分:0)

您可能还想设置set_time_limit(0)memory limit

编辑:您可能还想要console.log(string);或者console.log(string.length);在您的请求验证设置正确之前,并在firebug或chromes开发人员工具中检查您的请求,以验证您的数据是否正在发送。

答案 3 :(得分:0)

只需从参数名称中删除单引号!

自:

data: {'data_string': string}

要:

data: {data_string: string}

答案 4 :(得分:-2)

//Adding Respond Box After Selected Field
$( '[maxlength]' ).bind('click keyup', function(){
    var RespondBox = '<div class="StPgRp" id="UpdateRespond"></div>';
    $('#UpdateRespond').remove();
    $(this).after(RespondBox);
});

//Counting Maximum Characters Allowed In Selected Field
$( '[maxlength]' ).bind('click keyup', function(){
    var MaxLength = $(this).attr('maxlength');
    var CurrentLength = $(this).val().length;
    var Remainder = MaxLength - CurrentLength;
    $('#UpdateRespond').html('You have ' + Remainder + ' characters remaining.');
});

//Checking the PHP Function if YES then send message to user
$( '.Check' ).bind('click keyup', function(){
    var Check = $(this).parent().children('.Check').val();
});

将此添加到链接到您的网页和已排序的.js文件中。