2014-02-23 43 views
6

我想在我的PHP應用程序一個JSON消息來讀取,這是我的PHP代碼:PHP:的file_get_contents(「PHP://輸入」)的JSON消息返回字符串

$json = file_get_contents('php://input'); 
$obj = json_decode($json, TRUE); 
echo $obj->{'S3URL'}; 

當我做這個我收到以下錯誤:

Trying to get property of non-object in setImage.php on line 25 (line 25 is the echo $obj->{'S3URL'}; line) 

這是請求頁面的請求體:

Request Url: http://localhost:8888/setImage.php 
Request Method: POST 
Status Code: 200 
Params: { 
    "S3URL": "http://url.com" 
} 

這是reques牛逼標題:

Accept: application/json 
Content-Type: application/json 
Connection: keep-alive 
Origin: chrome-extension: //rest-console-id 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, 

但是,如果我不是呼應了$json變量,我得到以下幾點:

S3URL=http%3A%2F%2Furl.com 

所以它看起來像file_get_contents('php://input');在閱讀它作爲一個字符串,而不是JSON,這將使解析更加困難。

爲什麼它沒有被返回JSON,或者我怎麼能得到它的返回爲JSON任何想法?

+3

json_decode($ JSON,TRUE);返回數組不是對象。 –

+1

'php:// input'總是按原樣提取請求主體。因此,如果您沒有獲取JSON代碼,則不會發送JSON代碼。期。由於有一個'='你得到的字符串中,形式最有可能被作爲'應用程序/ x-WWW的形式urlencoded' –

+0

Abhik,是的,我試圖消除TRUE,但仍然沒有骰子。感謝Johannes H,我使用REST控制檯來發送數據,並且從請求的內容頭中看起來它應該將它作爲JSON發送,但也許它不是? –

回答

5

您使用的json_decode是創建一個關聯數組,而不是一個對象。你可以把它看作一個數組,而不是一個對象。在第二個參數

$obj = json_decode($json); 

See the documentationjson_decode():如果你想要一個對象,利用這一點,而不是

assoc When TRUE, returned objects will be converted into associative arrays.

而且,約翰內斯H.在評論中指出的,echo $json;輸出指示你並沒有真正接受JSON,所以你也需要解決這個問題。你問爲什麼它不是JSON;沒有看到你如何要求這個腳本,這是不可能的。

+4

雖然正確,但這不是代碼中唯一的問題。如果問題中提到'echo $ json;'輸出'S3URL = http%3A%2F%2Furl.com',那麼首先不會發送JSON。 –

+0

@JohannesH。好點子。 –

+0

正確的,即使刪除「TRUE」也沒有解決問題。我認爲Johannes在這裏是正確的。 –

-2

$ OBJ = json_decode($ JSON);

只需卸下真

0

該問題可能是形式的PHP://輸入(是一個只讀流,其可以讀取從請求主體的原始數據)。 從php.ini更改一些設置,嘗試使「allow_url_fopen」。