php post不存在,PHP缺少一些$ _POST值,但在php:// input中存在

造成此问题的原因有很多。最好检查您的错误日志。许多导致此症状的原因会将消息放入错误日志,但不会在PHP应用程序中显示错误。

一些可能的原因:

Suhosin

Suhosin是PHP的扩展,旨在保护服务器和用户免受PHP应用程序和PHP核心中已知和未知的缺陷的影响。它的作用之一是限制$ _POST,$ _ GET,$ _ REQUEST和$ _COOKIE的大小。如果您的问题是Suhosin,则您的日志中将出现错误,例如

警报-超出配置的POST变量限制-删除了变量'foo'

解决方法很简单,只需增加php.ini中允许的最大变量数即可。如果您没有suhosin部分,则只需创建一个即可。像这样:

[suhosin]

suhosin.request.max_vars = 1000 # Default is 200

suhosin.post.max_vars = 1000 # Default is 200

还有其他Suhosin设置可能会导致这种情况,但是这些是最有可能的候选者。

无效的表单字段名称

在过去,PHP具有一个称为register_globals的设置(现已停用),该设置可自动将GET和POST变量转换为PHP变量。因此,如果您的表单具有字段“ foo”和“ bar”,则在提交该表单时,将自动创建变量$ foo和$ bar。但是,有些字符不能在PHP变量名称中使用(空格,点,方括号等)。根据您使用的字符,变量可能会去除无效字符,丢失其值或未设置。尽管事实不再使用register_globals,但是PHP在构建$ _POST,$ _ GET,$ _ REQUEST和$ _COOKIE时仍会删除这些字符。如果您无法修复表单字段的值,则可以尝试以下操作:

/**

* Converts raw POST data into an array.

*

* Does not work for hierarchical POST data.

*

* @return array

*/

function real_post() {

static $post;

if (!isset($post)) {

$pairs = explode("&", file_get_contents("php://input"));

$post = array();

foreach ($pairs as $pair) {

$x = explode("=", $pair);

$post[rawurldecode($x[0])] = rawurldecode($x[1]);

}

}

return $post;

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值