Loading...

如何通过php获取别的服务器上的图片

2007-09-08 09:59:53 发表于PHP, 网站技术 本文链接: 如何通过php获取别的服务器上的图片

目前本站FB订阅图标的显示服务申请已经停止,但是作为一个负责的男人,我会一直保留以前的申请的图标继续显示的,除非不可抗拒的因素产生,俗话说,授人鱼不如授人以渔,所以对于虚拟主机abroad的兄弟,下面的这段代码或许对你有用。当然啊,你也别担心麻烦,后面会提供源代码的下载和使用方法

< ?php $feedburner_image ="http://feeds.feedburner.com/~fc/storydaycom?bg=99CCFF&fg=444444&anim=0";//图片的路径 header("Content-type: image/gif"); // //下面的两个函数来自php.net //函数的作用是利用socks获取http内容 // function httpSocketConnection($host, $method, $path, $data) { $method = strtoupper($method); if ($method == "GET") { $path.= '?'.$data; } $filePointer = fsockopen($host, 80, $errorNumber, $errorString); if (!$filePointer) { return false; } $requestHeader = $method." ".$path." HTTP/1.1\r\n"; $requestHeader.= "Host: ".$host."\r\n"; $requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n"; $requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n"; if ($method == "POST") { $requestHeader.= "Content-Length: ".strlen($data)."\r\n"; } $requestHeader.= "Connection: close\r\n\r\n"; if ($method == "POST") { $requestHeader.= $data; } fwrite($filePointer, $requestHeader); $responseHeader = ''; $responseContent = ''; do { $responseHeader.= fread($filePointer, 1); } while (!preg_match('/\\r\\n\\r\\n$/', $responseHeader)); if (!strstr($responseHeader, "Transfer-Encoding: chunked")) { while (!feof($filePointer)) { $responseContent.= fgets($filePointer, 128); } } else { while ($chunk_length = hexdec(fgets($filePointer))) { $responseContentChunk = ''; $read_length = 0; while ($read_length < $chunk_length) { $responseContentChunk .= fread($filePointer, $chunk_length - $read_length); $read_length = strlen($responseContentChunk); } $responseContent.= $responseContentChunk; fgets($filePointer); } } return chop($responseContent); } function parseChunked($response) { $do = true; $return = ""; $size = NULL; while($do) { // suppress warnings w/ @ if offset not in string (past end) $pos = @strpos($response, "\r\n", 0); if(!($pos === false) && $size === NULL) { // we found CRLF, get len from hex $size = hexdec(substr($response, 0, $pos)); // get the actual chunk-len, reset $response, $size $return .= substr($response, $pos+2, $size); $response = substr($response, ($pos+2) + $size); $size = NULL; } else { $do = false; } // end if/else } // end while return $return; } // end function parseChunked() $http_get_path = str_replace("http://feeds.feedburner.com","",$feedburner_image ); require "date.php";//存放上次获取图标的时间 if( date('YmdH') - $lastupdate > 4 ) {
//如果相距上次获取图标的时间超过了4小时
//则更新图标
//reload the image every 4 hours

$phpstr = "";
$contents = httpSocketConnection('feeds.feedburner.com', "GET", $http_get_path, $qString);
//write image file
//将图标写入文件中
$fp =fopen( "feedburner.gif" ,"w+" );
fwrite($fp , $contents);
fclose($fp);
//同时更新本次获取图标的时间
$fp =fopen( "date.php" ,"w+" );
$datecontent = "< ?php \$lastupdate = ".date('YmdH').";\n ?>";
fwrite($fp , $datecontent);
fclose($fp);
die($contents);
}
readfile("feedburner.gif");
?>

代码在这里
fb.zip
请将fb.php用记事本打开,修改顶部$feedburner_image 的路径为你要转发图片的路径
然后将其他两个文件的属性设置成0666,最后在需要引用图片的地方引用fb.php的路径即可。

利用同样的原理大家也可以轻松的解决ajax http的跨域处理问题,不明白这一行在说什么的,忽略这一行。

该日志未加标签
发表于 2007-09-08 09:59:53 目录:PHP, 网站技术 [RSS 2.0] 你可以发表评论, 或者从您的网站 trackback
  • 相关阅读
  • homezz 美国专业主机商
    feed url
    上一篇: « 新闻时间
    已经有2位大师动手指导 拒绝低俗
    • 1楼 Jake 在2007.09.09 22:33发表评论如下: 回复

      看不懂。高手。

      • 2楼 istef 在2007.09.15 18:10发表评论如下: 回复

        我用的是 libcurl,只写了几行就可以了。而且 libcurl 的效率也不低。另外 bluehost 好像支持 curl 吧。[r]不错,curl是最好的选择,包括以前做缓存的时候都是用的这个东西,但是考虑到n多服务器没有这个lib,也考虑到n多服务器不支持fopen url,所以就用了这个socksopen,反正已经缓存,效率已经无所谓[/r]

        评论分页: 1
        (Required)
        (Required, not published)
        如果留言未显示无需重复留言,我将为你恢复!