PHP的postform post 提交乱码问题

正在加载中……
CentOs ver 6.3
php ver 5.3.20
昨天生产环境出了个bug,一个巨大无比的post表单,几百个输入框,近一千个checkbox,在用post方法提交到后台的时候, 发现数据被拦腰截断。一路打debug, 发现PHP 拿到 $_POST的时候,数据就不足。一开始以为是php中的post_max_size问题,但是设成100M也不管用
修改下面相关配置后还是没有效果
nginx.conf
#keepalive_timeout& 60;
#send_timeout 3m;
client_max_body_size 500m;
max_execution_time = 600
max_input_time = 600
memory_limit = 32m
file_uploads = on
upload_tmp_dir = /tmp
upload_max_filesize = 32m
post_max_size = 32m
php-fpm.conf
&value name=&rlimit_files&&65535&/value&
&value name=&request_terminate_timeout&&0s&/value&
google一下,原来PHP从5.3.9开始增加一个变量 max_input_vars 用来限制提交的表单数量,折腾了半天,原来php小版本升级引起的不兼容,php中默认post中的参数的个数是1000, 超过部分会被自动扔掉。用 phpinfo()查看max_input_vars。如下图所示:
解决方法很简单,在PHP.ini中设置 max_input_vars = 5000
php.ini 文件里的& max_input_vars 默认值为 1000, 正常情况下够用,偶尔遇到我这种提交2000多个表单的情况还是比较少见的,不过,如果发现提交表单个数不全的情况,可以试试修改这个配置。
tags: php post 数据被截取, php post 数据不完整, php post 丢失数据
&转载请注明: &
与本文相关的文章详解跨域请求的两种方式,支持post请求 - 推酷
详解跨域请求的两种方式,支持post请求
原先一直以为要实现跨域请求只能用jsonp,只能支持GET请求,后来了解到使用POST请求也可以实现跨域,但是需要在服务器增加Access-Control-Allow-Origin和Access-Control-Allow-Headers头。下面说明下两个不同的方法实现的方式和原理。
JSONP实现跨域
常用的jquery实现跨域调用
url: &http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/index.php&,
dataType: &jsonp&,
jsonp: &callback&,
context: document.body,
success: function(data) {
console.log(data);
这个调用实际上的实现原理是
在网页中构造一个script标签,将src设置为对应的url,并增加上相应的callback参数,形如如下格式:
&script src=&http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/index.php?callback=jQuery&_=3&&&/script&
请求的服务端代码如下:
= json_encode(array(&id& =& &1&, &name& =& &tom&));
$callback = $_GET[&callback&];
echo $callback . &(& . $data . &)&;
实际上最后返回的内容就是一段js代码:
jQuery({&id&:&1&,&name&:&tom&})
当浏览器获取到该段js代码后就会执行这个函数,从而实现回调ajax请求时设置的success方法。
jsonp实现的缺点
了解了原理后,就知道jsonp实现的跨域方式不支持post请求,只能支持get请求。但是如果需要支持post请求该怎么办呢?下面谈下服务器端设置的方式。
服务端设置支持跨域
主要是Access-Control-Allow-Origin头参数,该参数用来指定允许哪个来源的域请求。服务端代码如下:
// 表示支持所有来源的域进行请求
// 实际在操作过程中可以设置为指定域
header('Access-Control-Allow-Origin:*');
$data = json_encode(array(&id& =& &1&, &name& =& &tom&));
对应的js代码:
type: &POST&,
url: &http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/header.php&,
dataType: &json&,
success: function(data) {
console.log(data);
可以支持post请求。
实际上个人并不是特别喜欢用跨域请求的方式,可能会带来一些不可预见的安全问题。比较习惯的方式通过本域下的服务端和跨域的源服务器进行交互。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 form post 提交乱码 的文章

 

随机推荐