php 无法获取客户端传来的值,求大婶 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lyp111332
V2EX    PHP

php 无法获取客户端传来的值,求大婶

  •  
  •   lyp111332 2016-04-20 09:02:42 +08:00 5421 次点击
    这是一个创建于 3463 天前的主题,其中的信息可能已经有所发展或是发生改变。
    客户端通过 post 方式发送 json 到服务器,我这里用$_POST 方法接收,但是打印出来却为空。第二种办法我用 file_get_contents("php://input");方式接收,但是我能直接返回 json 给他,但是还是打印不出来。请问下这是怎么回事
    35 条回复    2016-04-21 10:12:50 +08:00
    zztao
        1
    zztao  
       2016-04-20 09:06:32 +08:00
    $_POST 接受到的参数不是 application/json, 而是 url-encode 。打印可以啊,不过你要变为 json 的话得注意 json_decode 的第二个参数。默认 false 解析为 Object , true 解析为 Array
    lyp111332
        2
    lyp111332  
    OP
       2016-04-20 09:13:54 +08:00
    @zztao 打印不了,客户端那边传过来没有键值对,我这里根本无法打印$_POST[]也就是方括号里面的值不知道是什么, 直接 echo $_POST 也无法打印
    yangqi
        3
    yangqi  
       2016-04-20 09:16:56 +08:00
    @lyp111332 $_POST 是数组,你当然 echo 不了了,你贴点代码吧,这样空说谁知道怎么回事。
    Yiiiii
        4
    Yiiiii  
       2016-04-20 09:18:21 +08:00
    @lyp111332 你使用 php 输入流 试试看 file_get_content('php://input')
    yemoluo
        5
    yemoluo  
       2016-04-20 09:19:37 +08:00
    `file_get_contents('php://input', 'r');`
    qgy18
        6
    qgy18  
       2016-04-20 09:29:37 +08:00 via iPhone
    你可以看下这个:
    https://imququ.com/post/four-ways-to-post-data-in-http.html

    但也有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流,再 json_decode 成对象。一些 php 框架已经开始这么做了。
    lyp111332
        7
    lyp111332  
    OP
       2016-04-20 09:33:41 +08:00
    @GTim
    @Yiiiii
    @yangqi 这些使用过了,<?php$c = file_get_contents("php://input");echo ($c);>我这样子打印出来,客户端那边就能收到我打印出来的乱码了,但是我这里网页上显示不出来。 使用 var_dump 打印也一样没有数组为 0
    Delbert
        8
    Delbert  
       2016-04-20 09:41:39 +08:00 via Android
    dump 呢?
    lyp111332
        9
    lyp111332  
    OP
       2016-04-20 09:42:36 +08:00
    @Delbert 一样 完全没有信息显示在网页上 ,我是用谷歌浏览器
    qgy18
        10
    qgy18  
       2016-04-20 09:45:38 +08:00 via iPhone
    抓包看请求有响应没。

    网页不显示,不一定是没数据,如果用 jquery 一类的 ajax 发请求,响应的 content-type 不对也不解析。
    yangqi
        11
    yangqi  
       2016-04-20 09:46:16 +08:00
    @lyp111332 你客户端怎么传数据的?
    server
        12
    server  
       2016-04-20 09:48:21 +08:00
    content-type 问题, php post 只处理 application/x-www-form-urlencoded 。可以参看 laravel yii restful 实现方案。
    lyp111332
        13
    lyp111332  
    OP
       2016-04-20 09:49:23 +08:00
    @yangqi 用 http 协议 post 请求
    tagtag
        14
    tagtag  
       2016-04-20 09:58:25 +08:00
    没太明白你说的意思,他调你因为他给你 post 了,所以他能看到你的 echo ,你自己运行自己代码没传参数,所以啥都没有,不正常吗?
    tagtag
        15
    tagtag  
       2016-04-20 09:59:19 +08:00
    他调你的时候你 error_log 下,或者断点下
    O3YwA1ENkb7i35XJ
        16
    O3YwA1ENkb7i35XJ  
       2016-04-20 10:04:29 +08:00
    @lyp111332 无码无真相,请提供你提交数据至后端的 JS 代码,以及你后端的 php 代码.
    sfree2005
        17
    sfree2005  
       2016-04-20 10:25:00 +08:00
    试下这个: json_decode(urldecode($_POST['data']),true);
    O3YwA1ENkb7i35XJ
        18
    O3YwA1ENkb7i35XJ  
       2016-04-20 10:32:16 +08:00
    @lyp111332 根据你的描述做了一个简单的 Demo, 没发现有什么不能输出的.
    Demo: https://xqin.net/temp/json_test.html

    html 代码:
    ```

    <script src="http://www.v2ex.com//js.xqin.net/jquery-1.7.1.min.js" type="text/Javascript"></script>
    <script src="http://www.v2ex.com//js.xqin.net/jquery.json-2.3.min.js" type="text/Javascript"></script>

    <script type="text/Javascript">
    $.ajax('json_test.php', {
    type: 'POST',//POST
    contentType : 'application/json',//发送 JSON 格式的数据
    data: $.toJSON({t: Math.random()}),// $.toJSON 在 jquery.json 中定义
    success: function(v){
    alert(v);//输出服务器返回的内容
    }
    });
    </script>
    ```

    php 代码
    ```
    <?php
    echo file_get_contents('php://input');
    ```
    laoyuan
        19
    laoyuan  
       2016-04-20 10:40:07 +08:00
    基本上,我有点看明白了, LZ 一次请求,想在两个地方看到。
    b821025551b
        20
    b821025551b  
       2016-04-20 11:05:49 +08:00
    贴码吧,这样我们怎么猜
    msxcms
        21
    msxcms  
       2016-04-20 11:13:59 +08:00
    Content-Type:application/x-www-form-urlencoded
    realpg
        22
    realpg  
    PRO
       2016-04-20 11:35:23 +08:00   2
    楼上各位,我好想看明白楼主的脑袋里想啥了
    看到了这段代码: echo $_POST ,我觉得首先就不能把事儿想复杂了

    看来看去感觉是这样的:

    楼主写了个:
    http://www.demo.com/recieve.php
    然后他有一个客户端(json,app,服务器推送之类),往
    http://www.demo.com/recieve.php
    POST 了一个 json 参数,然后 recieve.php 会返回一个响应内容给客户端,但是应该是这个协议出了啥问题跟他设想的不一样,他想看这个通信的记录

    于是他用浏览器打开了
    http://www.demo.com/recieve.php
    为啥不显示之前通信的内容呢……
    qq316107934
        23
    qq316107934  
       2016-04-20 12:05:51 +08:00 via Android
    @realpg 我也这么觉得...
    kiwi95
        24
    kiwi95  
       2016-04-20 12:08:12 +08:00
    楼主根本没有懂 POST 的流程,都是自己在猜吧,仔细看看 php 的文档: http://php.net/manual/zh/reserved.variables.post.php
    qdpoboy
        25
    qdpoboy  
       2016-04-20 12:59:54 +08:00
    是在黑 php 嘛 -_-
    Slienc7
        26
    Slienc7  
       2016-04-20 14:15:15 +08:00 via Android
    http://php.net/manual/en/ini.core.php#ini.enable-post-data-reading

    ;;;

    哪里来的习惯喜欢在网页向服务器发送 JSON.
    lyp111332
        27
    lyp111332  
    OP
       2016-04-20 14:54:41 +08:00
    @laoyuan 不是这样的 是客户端发给我一个值,我要接收然后存在数据库中,但是数据库中没有数据显示 ,我就想着先打印客户端发过来的值看看,结果发现打印不出来。
    @qdpoboy
    @kiwi95
    @realpg
    sensui7
        28
    sensui7      2016-04-20 15:05:15 +08:00
    @lyp111332 你是不是用的 ajax 啊, 那玩意不能直接在服务端打印,看不到的.
    JiShuTui
        29
    JiShuTui  
       2016-04-20 15:24:49 +08:00
    @lyp111332 你所谓的打印是怎么打印?你又是在哪里查看打印的输出?
    wudanyang
        30
    wudanyang  
       2016-04-20 15:34:20 +08:00
    @lyp111332
    @JiShuTui
    说的对,你是 print_r 还是 var_dump ,打印输出到哪了。

    可以直接输出到日志中
    error_log(print_r($_POST, 1), 3, '/tmp/anyfile.log');
    KomeijiSatori
        31
    KomeijiSatori  
       2016-04-20 17:49:59 +08:00 via Android
    @lyp111332 先检查一下是不是客户端问题......?
    POPOEVER
        32
    POPOEVER  
       2016-04-20 17:57:01 +08:00
    这个乱哟,贴码吧,省得大家陪你瞎猜
    chairuosen
        33
    chairuosen  
       2016-04-20 18:23:12 +08:00
    遇到这种说不清的问题,搭建一个能复现问题的最小 demo ,大家都省事
    audi
        34
    audi  
       2016-04-20 18:25:40 +08:00 via iPhone   1
    这种简单的问题建议大家不要浪费时间。第一个楼主问题描述能力不够,第二个基础太差还没有学会走路就想跑。
    icekingcy
        35
    icekingcy  
       2016-04-21 10:12:50 +08:00
    @realpg 看到这个回复 觉得瞬间乐了 哈哈哈哈哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5417 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 01:22 PVG 09:22 LAX 18:22 JFK 21:22
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86