2011-06-18 40 views
1

最近,我的代碼沒有改變,我的PHP頁面開始掛在某個區域。它會在該行之前生成頁面上的所有HTML:PHP頁面掛在這段代碼

$tickerJSON = file_get_contents("http://mtgox.com/code/data/ticker.php"); 

我註釋掉了其他所有內容,這是導致錯誤的原因。

我知道那個JSON url是有效的,並且數組名是正確的。在這種情況下,我不確定問題出在哪裏。任何幫助?

注意:它不顯示部分或白色頁面,它將永遠保持加載而不顯示輸出。

+1

你已經在的display_errors打開你的PHP的配置? –

+0

檢查執行'file_get_contents'執行多少秒鐘。寫'$ starttime = microtime(1);'在該行和'print round(microtime(1) - $ starttime,5)之前'''之後。 file_get_contents的第二個參數在那裏看起來沒用。 –

+0

您也可以暫時打開[error-reporting](http://php.net/manual/en/function.error-reporting.php)。 –

回答

1

更新:

$tickerJSON = shell_exec('wget --no-check-certificate -q -O - https://mtgox.com/code/data/ticker.php'); 

你做的遠程連接需要很長的時間。你可以繞過提供超時值。如果時間太長,該函數將不會返回任何數據,但它不會阻止腳本繼續運行。

下一步你需要設置用戶代理:

// Create a stream 
$opts = array(
    'http'=>array(
    'timeout'=> 3, // 3 second timeout 
    'user_agent'=> 'hashcash', 
    'header'=>"Accept-language: en\r\n" 
) 
); 
$context = stream_context_create($opts); 
$url = "https://mtgox.com/code/data/ticker.php"; 
$tickerJSON = file_get_contents($url, FALSE, $context); 
+0

仍然會一直載入中。 – AKor

+0

好吧,比這真的看起來像一個連接問題。你有捲曲嗎?你可以通過shell運行測試嗎? – hakre

+0

服務器能夠完美地控制文件,所以這是一個PHP的問題,我想。 – AKor

2

的問題是遠程服務器似乎故意拖延不發送用戶代理字符串的請求。默認情況下,PHP的用戶代理字符串爲空。

嘗試加入這一行直接呼叫上面:

ini_set('user_agent', 'PHP/' . PHP_VERSION); 

我測試過上述使用這個腳本,它爲我工作很大:

<?php 

ini_set('user_agent', 'PHP/' . PHP_VERSION); 

$tickerJSON = file_get_contents("http://mtgox.com/code/data/ticker.php"); 

echo $tickerJSON; 
+0

似乎仍然永遠發送請求。 – AKor

+0

@Sennheiser - 在同一個「服務器」上(如在執行PHP文件的同一臺計算機上),您是否能夠在瀏覽器中打開鏈接並查看它的內容?如果他們試圖限制訪問他們的內容,他們可能會阻止您的IP地址。 –

+0

是的,我可以從服務器訪問鏈接罰款。這可能是SSL的一個問題,因爲wget會吐出一些SSL錯誤,直到忽略SSL爲止。此外,該URL是http,但它在瀏覽器中自動解析爲https。也許這是原因? – AKor