不知道是什么原因导致服务器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