不知道是什么原因?qū)е?span id="wmqeeuq" class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B7%FE%CE%F1%C6%F7">服務(wù)器file_get_contents不能使用,fsockopen半殘廢。不是PHP版本原因,因?yàn)橥姹緭Q電腦可以,不是allow_url_fopen問題,幾經(jīng)認(rèn)證。
錯(cuò)誤提示:failed to open stream: HTTP request failed! 不是用戶權(quán)限問題

為解釋情況,先看兩個(gè)小程序片段
復(fù)制內(nèi)容到剪貼板
代碼:
$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);
上面是第一段,如果沒錯(cuò)的話,上面的會(huì)輸出一些二進(jìn)制亂碼,沒錯(cuò),圖片直接打印是這樣的。可是在我的一臺(tái)正式服務(wù)器上卻輸出空。
經(jīng)過一步步調(diào)試改為如下代碼
復(fù)制內(nèi)容到剪貼板
代碼:
$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);
上面這段代碼輸出了我想要的內(nèi)容。改動(dòng)只是把fputs的內(nèi)容先連成一個(gè)長(zhǎng)字符串,一起提交。。為啥會(huì)有這個(gè)BUG沒查出來。網(wǎng)上也有很多相同的難友

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

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

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