2013-10-02 89 views
0

我想設置一個PHP腳本,返回一些DB條目到JSON文件。當我從另一個網站上讀取該腳本時,該腳本似乎正在工作,但是,當我嘗試從同一文件夾讀取輸出時(出於測試目的),它不起作用。用於生成JSON PHP代碼:PHP到JSON:閱讀文件返回的PHP代碼

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 01 Jan 1996 00:00:00 GMT'); 
header('Content-type: application/json'); 
//snipped sql magic 
echo json_encode($rows); 

當我訪問網頁上我的網站,它將返回的期望是什麼:

[{"id":96,"name":"name1"},{"id":39,"name":"name2"}] 

到目前爲止好。 然而,當我嘗試讀取這個文件在同一文件夾中其他的PHP文件的輸出,如

$json = file_get_contents(urlencode('json.php')); //same result without the urlencode 
echo var_dump($jsonData); 

它將返回PHP代碼而不是JSON文件的內容。 我不明白這是爲什麼。 有什麼想法?

回答

3

這是完全正常的。方法'file_get_contents'讀取文件的內容,並且不會執行它包含的php腳本。

您可以使用'include'或'curl'來做到這一點。

'include'將讀取一個文件並將其包含的php腳本插入到當前腳本中。 'curl'會調用一個URL,所以它實際上會詢問你的服務器的php文件。因爲你在腳本里面使用'header',所以'curl'就是你需要的,但'include'就足夠了。

這裏是捲曲例如:

$ch = curl_init("http://localhost/your/script.php"); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

$json = json_decode(curl_exec($ch)); 
curl_close($ch); 

更多信息:

file_get_contents : http://php.net/manual/fr/function.file-get-contents.php 
include : http://php.net/manual/fr/function.include.php 
curl : http://php.net/manual/fr/book.curl.php 
+0

好的,謝謝。我現在明白了。我今天學到了一些東西,所以這一天沒有浪費:) 包括做的伎倆。 – bolvo

+0

偉大:)然後請將我的答案標記爲已接受的解決方案。祝你好運。 – Scalpweb

0

您只需在您的測試文件返回json_encode版數據。

// json_data.php 
return json_encode(array(
    'id' => 5, 
    'name' => 'John' 
)); 

和檢索include

header('Content-Type: application/json'); 
$json = include 'json_data.php'; 
echo urlencode($json); 

或者這些數據,你甚至可以在json_data.php腳本已經返回urlencode版數據。

return urlencode(json_encode(array(
    'id' => 5, 
    'name' => 'John' 
))); 

希望,這會幫助你。

+0

這將不再適用於像XHR這樣的遠距離通話。 – Scalpweb

+0

同意這一點,但這種解決方案很簡單,並且可以正確地用於'從同一文件夾讀取輸出(用於測試目的)'。 –