2016-08-20 100 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'));