我正在尝试通过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)
答案 0 :(得分:28)
您必须检查您和服务器之间所有项目的限制参数。代理服务器很难,但至少你可以检查:
的Apache:
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文件中。