【问题标题】:file_get_contents('php://input') returns empty when sending thru url parameterfile_get_contents('php://input') 通过 url 参数发送时返回空
【发布时间】:2016-12-27 12:47:48
【问题描述】:

我知道这个问题已经在论坛中被问过好几次了,但没有一个答案对我有用。每次尝试通过 URL 参数发送数据时,我仍然得到空字符串。

这是 PHP 代码

            <?php   
                    if (!file_get_contents("data:,ok")) {
                              die("Houston, we have a stream wrapper problem.");
                         }
                    print "CONTENT_TYPE: " . $_SERVER['CONTENT_TYPE'] . "<BR />";
                    $data = file_get_contents('php://input');
                    print "DATA: <pre>";
                    var_dump($data);
                    $tempArray = json_decode(file_get_contents('generated.json'), true);
                    array_push($tempArray, $data);
                    $jsonData = json_encode($tempArray);
                    file_put_contents('generated.json', $jsonData);
                    print "</pre>"; 
            ?>
            <form method="post">
                <input type="text" name="name" value="ok" />
                <input type="submit" name="submit" value="submit"/> 
            </form>

使用url参数传递变量的例子

http://localhost/tests/testtest.php?name=what

输出:

            Notice: Undefined index: CONTENT_TYPE in C:\Apache24\htdocs\tests\testtest.php on line 5
            CONTENT_TYPE:
            DATA: 

我已经设置了allow_url_fopen = On,设置了post_max_size = 8M,还是没有希望。但是,当我尝试通过单击提交按钮发送数据时,它会将原始数据发送到 php (string(21) "name=ok&amp;submit=submit")。

有人愿意帮忙吗?谢谢!

【问题讨论】:

标签: php


【解决方案1】:

这在php://input中有描述

php://input

php://input 是一个只读流,允许您从请求正文中读取原始数据。对于 POST 请求,最好使用 php://input 而不是 $HTTP_RAW_POST_DATA,因为它不依赖于特殊的 php.ini 指令。

重要的部分是“POSTreqest”。

这意味着,当您说 http://www.example.com/tests/testtest.php?name=what 时,您发送的是 GET 请求,而不是 POST 请求。因此,没有请求正文,您无法通过php://input阅读任何内容。


要读取作为 URL 参数传递的表单输入,您可以使用全局 $_GET 变量。

在使用POST请求时,通常使用全局$_POST数组,而不是通过php://input手动读取请求体。

你也可以考虑$_REQUEST,如果你不关心它是POST还是GET请求。不过,请注意What's wrong with using $_REQUEST[]?

【讨论】:

  • 你有什么其他方法可以让我通过 url 参数发送数据吗?
【解决方案2】:

你在找$_SERVER['QUERY_STRING']吗?

<?php

// Basic way, but has the risk of E_NOTICE when it is undefined.
var_dump($_SERVER['QUERY_STRING']);

// Safe way
var_dump((string)filter_input(INPUT_SERVER, 'QUERY_STRING'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-09
    • 2015-01-24
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 2013-10-09
    • 2018-06-08
    相关资源
    最近更新 更多