PHP / Apache / AJAX – POST限制?
我试图通过ajax(jQuery)发送200万字符(非二进制string)的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"
less量的数据(例如var string = 'test'
)然后$_POST["data_string"]
返回test
,如预期。 所以我想知道是否有某种数据限制,我在Apache2,PHP或浏览器本身? 我正在使用Google Chrome 17.0.963.79
EDIT2: memory_limit = 256M
在php.ini
在php.ini中编辑3: max_input_time = -1
编辑4:var_dump($ _ POST)返回数组(0)
EDIT5:在debian上运行最新的PHP5稳定版本:PHP 5.3.3-7 + squeeze8与Suhosin-Patch(cli)(内build:Feb 10 2012 14:12:26)
您必须检查您和服务器之间的所有项目的限制参数。 代理服务器很难,如果有的话,但至less你可以检查:
阿帕奇:
- LimitRequestBody ,默认2Gb左右,64bits可能更大,请查看错误日志了解详情。
PHP:
- post_max_size与POST大小直接相关
- upload_max_filesize可能是不相关的,不确定
- max_input_time ,如果POSt时间太长
- max_input_nesting_level如果你的数据是一个有很多子层次的数组
- max_execution_time ,但相当确定不是这样
- memory_limit ,因为您可能会达到超过subprocess允许的内存大小
- max_input_vars ,如果你的数据数组有很多元素的话
如果你已经达到了编译的Apache限制,你唯一的解决scheme就是避免直接把这么大的数据块存起来,你将不得不把它分解成几块。
你也可以检查suhosin.ini设置,例如:
suhosin.post.max_value_length = 65000
你可能还想设置set_time_limit(0)和你的内存限制 。
编辑:你可能也想console.log(string)
; 或者console.log(string.length);
在您的请求之前validation它是否正确设置,并检查您的请求在萤火虫或开发人员工具chromesvalidation您的数据正在发送。
只需从参数名称中删除单引号!
从:
data: {'data_string': string}
至:
data: {data_string: string}
//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文件链接到您的网页和您的sorting!