2016-08-20 104 views
0

我知道这个问题已经在论坛上多次提出过,但是没有任何答案适用于我。每次尝试通过URL参数发送数据时,我仍然会得到空字符串。file_get_contents('php:// input')在发送通过url参数时返回空值

这是PHP代码使用URL参数

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

输出传递变量的

  <?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> 

实施例:

  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&submit=submit")。

有人帮忙吗?谢谢!

+0

http://stackoverflow.com/a/5519834/1005215 –

回答

2

这在php://input

PHP描述://输入

PHP://输入是一个只读流,其允许用户从请求主体读的原始数据。在POST请求的情况下,最好使用php://输入而不是$ HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令。

重要的部分是“POST请求”。

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


改为URL参数传递的形式输入,你可以使用全局变量$_GET

当您使用POST请求时,通常使用全局$_POST数组,而不是通过php://input手动读取请求正文。如果你不关心它是POST还是GET请求,你也可以考虑$_REQUEST。虽然,请注意What's wrong with using $_REQUEST[]?

+0

你有任何其他方法我可以使用,使可以发送数据进URL参数? – Jonaii

1

您是否在寻找$_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'));