<?php
//
// Function: 获取远程图片并把它保存到本地
//
//
// 确定您有把文件写入本地服务器的权限
//
//
// 变量说明:
// $url 是远程图片的完整URL地址,不能为空。
// $filename 是可选变量: 如果为空,本地文件名将基于时间和日期
// 自动生成.
function GrabImage($url,$filename="") {
if($url==""):return false;endif;
if($filename=="") {
$ext=strrchr($url,".");
if($ext!=".gif" && $ext!=".jpg"):return false;endif;
$filename=date("dMYHis").$ext;
}
ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
$fp2=@fopen($filename, "a");
fwrite($fp2,$img);
fclose($fp2);
return $filename;
}
$img=GrabImage("http://img1.moko.cc/users/1/473/142157/post/a2/img1_src_6357912.jpg","");
if($img):echo '<pre><img src="'.$img.'"></pre>';
else:echo "false";
endif;
?>1.$filename 怎样保存在本地的时候是按链接里面的文件名来保存的了?2.$img=GrabImage怎样改可以获取到整个网页里面的图片,而不是单一的图片了?例如获取 http://www.moko.cc/post/732005.html 里面 img src2= 的所有图片,是img src2不是img src。3.如果只想在浏览器显示获取到“img src2= ”里面的图片,而不下载回来本地,要加哪些代码了?

解决方案 »

  1.   

    1:$fp2=@fopen($filename, "a");//这个就是文件名
    fwrite($fp2,$img);
    fclose($fp2);
    2:读网页源码,正则src2,就得到了所有src2的图片了
    3:识别是显示而不是读取后
    不要fopen了,直接输出<img src=$path不就出来了,多个图片就循环输出
      

  2.   

    1.将GrabImage函数中$filename=date("dMYHis").$ext;修改为$filename=basename($url);这样文件名就是链接里面的文件名
    2.通过file_get_contents取得指定位址的内容,并储存至变量中,再通过preg_match_all正则过滤池img src2的所有图片,然后对取得img 数组变量循环,将文件名存储到$filename[]中,此时$filename[]=basename($url);
    3.如果不下载,直接输出<img src=$path不就出来了,多个图片就循环输出