请问 PHP 5.6 用什么代替 php://input 呢?

2015-08-10 16:04:48 +08:00
 abelyao

最近做了一个程序,部署在 SAE 上,环境是 PHP 5.6。
今天看了一下 SAE 上的日志,debug 中上万条日志提示:

PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead.

因为我这个程序是和微信公众号对接的,微信会把消息体以 XML 的结构 POST 到我这边,所以我现在使用 file_get_contents('php://input') 来获取消息。

不知道是不是我对这条 debug 理解有问题,说的应该是推荐用 php://input 吧?但怎么还每一次都有警告呢?

难道 5.6 之后不推荐这个方式了?那用什么方式来代替呢?谢谢~

4108 次点击
所在节点    PHP
14 条回复
xbonline
2015-08-10 16:15:23 +08:00
To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input
stream instead.
已經說得很清楚了嘛
honkew
2015-08-10 16:15:57 +08:00
为什么不用$_POST呢,这是取信息流吧,$HTTP_RAW_POST_DATA全局变量应该能取到
iugo
2015-08-10 16:20:06 +08:00
最近在做微信开发的时候用到. 官方文档说建议使用 php://input.

在 PHP 7 中, 会完全摒弃 HTTP_RAW_POST_DATA. 后者会消耗更多的资源, 并且功能可以被完全取代, 所以取消了. 在 ini 中的配置项也失效.
abelyao
2015-08-10 16:21:50 +08:00
@xbonline
谢谢,我是已经使用 file_get_contents('php://input') 了,而且没有在其它地方用到 $HTTP_RAW_POST_DATA,另外 SAE 的环境不能修改 php.ini 配置吧?

@honkew
因为微信服务器 POST 过来不是以某个字段 POST 过来的,而是将整个内容 POST 过来。话说这个警告不就是说不要用 $HTTP_RAW_POST_DATA 来或吗?
abelyao
2015-08-10 16:22:55 +08:00
@iugo 那我的理解应该木有错啊,用 php://input 是对的,可是在 SAE 的环境中也没办法修改 php.ini 来去掉这个警告…
honkew
2015-08-10 16:38:27 +08:00
能正常使用 直接屏蔽掉这个错误就好
@file_get_contents('php://input');
abelyao
2015-08-10 16:39:27 +08:00
@honkew ……对哦,把这个给忘了
gongpeione
2015-08-10 16:40:26 +08:00
ini_set('always_populate_raw_post_data', '-1'); 用这个?
abelyao
2015-08-10 16:54:33 +08:00
@honkew 加了 @ 也没用……

@gongpeione
在 index.php 入口文件的第一行加了这句话也没用… 还是抛出警告,估计是 SAE 屏蔽了这个函数…
msxcms
2015-08-10 19:10:06 +08:00
扔掉 SAE
realpg
2015-08-10 19:37:42 +08:00
@abelyao SAE的PHP不是一般的PHP
他可能再内部转换了你的php://input为那个 然后就抛这个问题了……
他的PHP改得乱七八糟的
abelyao
2015-08-10 19:53:36 +08:00
@realpg 确实改得太多… 据说连 curl 也都是重新封装过的…
kn007
2015-08-10 19:57:04 +08:00
@abelyao 确实都是重新封装过的,很多函数。
abelyao
2015-08-10 20:14:41 +08:00
@kn007 发了个工单给 SAE,主要是因为 debug 日志里面全被这条警告占满了,影响了日志的作用,看看 SAE 怎么答复吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/212133

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX