不知道是什么原因導致服務器file_get_contents不能使用,fsockopen半殘廢。不是PHP版本原因,因為同版本換電腦可以,不是allow_url_fopen問題,幾經認證。
錯誤提示:failed to open stream: HTTP request failed! 不是用戶權限問題

為解釋情況,先看兩個小程序片段
復制內容到剪貼板
代碼:
$fp = fsockopen("cplink.duozz.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fputs($fp,"GET /public/default/images/logo.jpg HTTP/1.0\r\n");
fputs($fp,"Host: cplink.duozz.com\r\n");
fputs($fp,"Connection: Close\r\n\r\n");
$tmp = "";
while (!feof($fp)) {
$tmp .= fgets($fp, 128);
}
fclose($fp);
}
var_dump($tmp);
上面是第一段,如果沒錯的話,上面的會輸出一些二進制亂碼,沒錯,圖片直接打印是這樣的。可是在我的一臺正式服務器上卻輸出空。
經過一步步調試改為如下代碼
復制內容到剪貼板
代碼:
$fp = fsockopen("cplink.duozz.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /public/default/images/logo.jpg HTTP/1.0\r\n";
$out .= "Host: cplink.duozz.com\r\n";
$out .= "Connection: Close\r\n\r\n";

fputs($fp, $out);
$tmp = "";
while (!feof($fp)) {
$tmp .= fgets($fp, 128);
}
fclose($fp);
}
var_dump($tmp);
上面這段代碼輸出了我想要的內容。改動只是把fputs的內容先連成一個長字符串,一起提交。。為啥會有這個BUG沒查出來。網上也有很多相同的難友

下面講正題。
pub_httpdown.php 里恰恰是用的我講的第一種方式,結果直接造成遠程圖片不能本地話
我通過改為第二中方式解決BUG。不過還是希望官方有高手能解釋下為什么。
改過的pub_httpdown.php見附件

另外還有一個小BUG 此文件的SaveToText函數調用了一個并不存在的$this->SaveBinFile() 我覺得作者本意可能是要用$this->SaveToBin()所以也改了。
希望官方也講一下。

from : http://bbs.linuxphp.org/thread-197-1-1.html