PHP/Apache/AJAX - POST 限制?
Posted
技术标签:
【中文标题】PHP/Apache/AJAX - POST 限制?【英文标题】:PHP/Apache/AJAX - POST limit? 【发布时间】:2012-03-30 06:26:39 【问题描述】:我正在尝试通过 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 或浏览器本身中是否存在某种数据限制?我正在使用谷歌浏览器 17.0.963.79
EDIT2:memory_limit = 256M
在 php.ini 中
EDIT3:max_input_time = -1
在 php.ini 中
EDIT4:var_dump($_POST) 返回 Array(0)
EDIT5:在 debian Squeeze 上运行 PHP5 的最新稳定版本:带有 Suhosin-Patch (cli) 的 PHP 5.3.3-7+squeeze8(构建时间:2012 年 2 月 10 日 14:12:26)
【问题讨论】:
对于明显更小的字符串(例如test
)是否仍然存在相同的错误?未定义的索引使它看起来好像没有被发布。
不,小文本数据不会出现错误。
尝试var_dump($_GET); var_dump($_POST);
如果没有,检查 apache 配置文件是否有可能的限制
你使用的是什么 php 版本?由于哈希冲突 DOS 攻击,php 最近对发布数据处理进行了一些侵入性更改。
每个 HTTP 服务器实现(Apache、IIS 等)都有自己的 POST 操作数据限制设置。如果您能够配置服务器,则可以在 .htaccess 文件中更改限制。
【参考方案1】:
您可能还想设置set_time_limit(0) 和您的memory limit。
编辑:您可能还想console.log(string)
;或 console.log(string.length);
在您请求验证设置正确之前,并在 firebug 或 chromes 开发人员工具中检查您的请求以验证您的数据是否正在发送。
【讨论】:
memory_limit = 256M, set_time_limit(0) 没有改变任何东西。 还有一个 max_input_time ini 设置。还要检查您的更改是否确实生效 我设置max_input_time为-1,问题依旧。【参考方案2】:您必须检查您和服务器之间所有项目的限制参数。如果有代理服务器,这很难,但至少你可以检查一下:
阿帕奇:
LimitRequestBody,默认约为 2Gb,64 位可能更大,详情请查看错误日志。PHP:
post_max_size 与 POST 大小直接相关 upload_max_filesize 可能无关,不确定 max_input_time,如果 POST 耗时过长 max_input_nesting_level 如果你的数据是一个包含很多子级别的数组 max_execution_time,但很确定不是这样 memory_limit,因为您可能会达到超出子进程允许内存的大小 max_input_vars,如果你的数据数组有很多元素如果您已达到 Apache 的编译限制,您唯一的解决方案是避免直接 POST 如此大的数据块,您必须将其分解为多个部分。
【讨论】:
谢谢,我怀疑这个字符串太大了,我可能会把它分成几块。 谢谢你,max_input_vars
是我们的罪魁祸首。【参考方案3】:
您也可以检查 suhosin.ini 设置,例如:
suhosin.post.max_value_length = 65000
【讨论】:
【参考方案4】://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 文件中!
【讨论】:
以上是关于PHP/Apache/AJAX - POST 限制?的主要内容,如果未能解决你的问题,请参考以下文章