聽起來像一個錯誤。但只是爲了後人,這裏有一些你可能想要調試的東西。
allow_url_fopen
:已經測試過Apache下
- PHP的行爲可能不同於PHP-CLI,並會在chroot/SELinux的/ FastCGI的/等提示。安全限制
- 本地防火牆:不可能的,因爲捲曲的作品
- 用戶代理阻止:這是相當普遍實際上,網站攔截檢索和未知的客戶
從你的ISP,這無論是軋液或者塊(PHP用戶
- 透明代理劑或非用戶代理可以被解釋爲惡意軟件)
- PHP流包裝問題
無論如何,首先讓我們來證明PHP的流處理器是功能:
<?php
if (!file_get_contents("data:,ok")) {
die("Houston, we have a stream wrapper problem.");
}
然後嘗試查看PHP是否發出真正的HTTP請求。首先打開的netcat在控制檯上:
nc -l 80000
和調試只用:
<?php
print file_get_contents("http://localhost:8000/hello");
,從這裏,你可以嘗試用PHP進行溝通,看看是否有什麼,如果你的變動內容響應返回。首先輸入一個無效的響應到netcat中。如果沒有錯誤發生,您的PHP軟件包就會被凍結。
(您也可以嘗試溝通過「TCP:// ..」處理即可。)
接下來與HTTP流包裝參數的試驗。字面上使用http://example.com/,這是已知的工作,並永遠不會阻止用戶代理。
$context = stream_context_create(array("http"=>array(
"method" => "GET",
"header" => "Accept: xml/*, text/*, */*\r\n",
"ignore_errors" => false,
"timeout" => 50,
));
print file_get_contents("http://www.example.com/", false, $context, 0, 1000);
我覺得ignore_errors是非常相關的。但檢查出http://www.php.net/manual/en/context.http.php,並特別嘗試將protocol_version
設置爲1.1(將得到分塊和曲解的響應,但至少我們會看到是否返回任何東西)。
如果即使這仍然不成功,然後嘗試破解http包裝。
<?php
ini_set("user_agent" , "Mozilla/3.0\r\nAccept: */*\r\nX-Padding: Foo");
這不僅會設置User-Agent,還會注入額外的標頭。如果在http流包裝器中構造請求時存在處理問題,那麼這可能最終會抓住它。
否則嘗試禁用任何Zend擴展,Suhosin,PHP xdebug,APC和其他核心模塊。可能會有干擾。否則這是Fedora軟件包特有的潛在問題。嘗試一個新版本,看看它是否存在於你的系統上。
有什麼理由,爲什麼你不希望使用的libcurl?似乎如果這是工作,它可能是一個理想的替代品。 – Treffynnon 2010-11-13 14:11:16
@Treffynnon我正在重寫代碼以使用現在的curl,但仍想知道file_get_contents()的最新錯誤 – 2010-11-13 14:19:46
對於哪個特定的URL不起作用? – mario 2010-11-13 14:21:08