PHP远程图片抓取心得

在做guotao168.com的过程中,需要将远程地址的图片保存至自己的服务器上,就利用下面的函数即可。

1
2
3
4
5
6
7
8
9
10
11
function GrabImg($url,$filename){
ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
$fp=@fopen($filename,"a");
fwrite($fp,$img);
fclose($fp);
return $filename;
}

在写抓取循环不断的去请求图片的时候,由于没有修改PHP的最大执行时间,需要利用页面刷新或跳转来实现持续抓取。第一次写的时候,使用

1
header('Location: http://www.example.com/');

结果出错,网页内包含重定向环,最后改用javascript页面跳转才解决。

1
2
3
<script language="javascript" type="text/javascript">
window.location.href='www.example.com';
</script>

两者的区别是:在php中,header直接发送http头,浏览器一接收到就跳转。而echo输出javascript脚本,浏览器要接收完页面的文本,开始运行javascript脚本后才开始跳转。

抓取一遍之后,发现有很多图片没有取到,后来竟然发现是目录没有写权限导致。于是进行第二遍抓取,首先判断抓取地址是否取到,然后再抓一次。这就引入一个问题,如何判断远程图片是否存在?

方法是通过请求地址返回头部参数来判断url是否存在。方法如下:

1
2
3
4
5
$headers = @get_headers($urlThumb);
if($headers[0] == 'HTTP/1.1 404 Not Found')
{
echo 'URL not Exists';
}

记得一定赋予目录写权限~~!

0%