不知道是什么原因導致服務器file_get_contents不能使用,fsockopen半殘廢。不是PHP版本原因,因為同版本換電腦可以,不是allow_url_fopen問題,幾經認證。
錯誤提示:failed to open stream: HTTP request failed! 不是用戶權限問題
為解釋情況,先看兩個小程序片段
經過一步步調試改為如下代碼
下面講正題。
pub_httpdown.php 里恰恰是用的我講的第一種方式,結果直接造成遠程圖片不能本地話
我通過改為第二中方式解決BUG。不過還是希望官方有高手能解釋下為什么。
改過的pub_httpdown.php見附件
另外還有一個小BUG 此文件的SaveToText函數調用了一個并不存在的$this->SaveBinFile() 我覺得作者本意可能是要用$this->SaveToBin()所以也改了。
希望官方也講一下。
from : http://bbs.linuxphp.org/thread-197-1-1.html
錯誤提示: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);
經過一步步調試改為如下代碼
復制內容到剪貼板
上面這段代碼輸出了我想要的內容。改動只是把fputs的內容先連成一個長字符串,一起提交。。為啥會有這個BUG沒查出來。網上也有很多相同的難友代碼:
$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);
下面講正題。
pub_httpdown.php 里恰恰是用的我講的第一種方式,結果直接造成遠程圖片不能本地話
我通過改為第二中方式解決BUG。不過還是希望官方有高手能解釋下為什么。
改過的pub_httpdown.php見附件
另外還有一個小BUG 此文件的SaveToText函數調用了一個并不存在的$this->SaveBinFile() 我覺得作者本意可能是要用$this->SaveToBin()所以也改了。
希望官方也講一下。
from : http://bbs.linuxphp.org/thread-197-1-1.html
我以為是 ubuntu amd64 9.04 有問題(使用默認安裝的 php 5.2.6),后來在我機器的虛擬機上裝就正常,服務器上就不行
不知道你的 CPU 是啥,我的是 Intel E2180
這位朋友,我也是這個現象,只在特定機器出現,應該是fsockopen方法的一個bug,你參考上面的寫法就可以解決了,我是碰到了此問題,覺得很詭異,查資料解決了放在這里的。