V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
abelyao
V2EX  ›  PHP

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

  •  1
     
  •   abelyao · 2015-08-10 16:04:48 +08:00 · 4271 次点击
    这是一个创建于 3425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做了一个程序,部署在 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 之后不推荐这个方式了?那用什么方式来代替呢?谢谢~

    第 1 条附言  ·  2015-08-10 20:13:34 +08:00
    根据讨论,估计是 SAE 环境的问题,目前已经发工单给 SAE,尚未得到回复,有结果了再 APPEND
    第 2 条附言  ·  2015-08-18 15:12:54 +08:00
    SAE 给的答复:
    您好,为了 PHP5.6 环境的兼容性,暂时不会将这个警告的 ini 选项关闭,这个警告不影响 PHP5.6 环境的正常使用。
    14 条回复    2015-08-10 20:14:41 +08:00
    xbonline
        1
    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
        2
    honkew  
       2015-08-10 16:15:57 +08:00
    为什么不用$_POST呢,这是取信息流吧,$HTTP_RAW_POST_DATA全局变量应该能取到
    iugo
        3
    iugo  
       2015-08-10 16:20:06 +08:00
    最近在做微信开发的时候用到. 官方文档说建议使用 php://input.

    在 PHP 7 中, 会完全摒弃 HTTP_RAW_POST_DATA. 后者会消耗更多的资源, 并且功能可以被完全取代, 所以取消了. 在 ini 中的配置项也失效.
    abelyao
        4
    abelyao  
    OP
       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
        5
    abelyao  
    OP
       2015-08-10 16:22:55 +08:00
    @iugo 那我的理解应该木有错啊,用 php://input 是对的,可是在 SAE 的环境中也没办法修改 php.ini 来去掉这个警告…
    honkew
        6
    honkew  
       2015-08-10 16:38:27 +08:00
    能正常使用 直接屏蔽掉这个错误就好
    @file_get_contents('php://input');
    abelyao
        7
    abelyao  
    OP
       2015-08-10 16:39:27 +08:00
    @honkew ……对哦,把这个给忘了
    gongpeione
        8
    gongpeione  
       2015-08-10 16:40:26 +08:00
    ini_set('always_populate_raw_post_data', '-1'); 用这个?
    abelyao
        9
    abelyao  
    OP
       2015-08-10 16:54:33 +08:00
    @honkew 加了 @ 也没用……

    @gongpeione
    在 index.php 入口文件的第一行加了这句话也没用… 还是抛出警告,估计是 SAE 屏蔽了这个函数…
    msxcms
        10
    msxcms  
       2015-08-10 19:10:06 +08:00
    扔掉 SAE
    realpg
        11
    realpg  
       2015-08-10 19:37:42 +08:00
    @abelyao SAE的PHP不是一般的PHP
    他可能再内部转换了你的php://input为那个 然后就抛这个问题了……
    他的PHP改得乱七八糟的
    abelyao
        12
    abelyao  
    OP
       2015-08-10 19:53:36 +08:00 via iPhone
    @realpg 确实改得太多… 据说连 curl 也都是重新封装过的…
    kn007
        13
    kn007  
       2015-08-10 19:57:04 +08:00
    @abelyao 确实都是重新封装过的,很多函数。
    abelyao
        14
    abelyao  
    OP
       2015-08-10 20:14:41 +08:00
    @kn007 发了个工单给 SAE,主要是因为 debug 日志里面全被这条警告占满了,影响了日志的作用,看看 SAE 怎么答复吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2979 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:08 · PVG 22:08 · LAX 06:08 · JFK 09:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.