知道服务器上图片所保存的路径,类http://site.com/main/photo/850/014.jpg,如何批量下载到本地,其中850文件夹及014文件名都从000开始匹配,文件存在就下载,否则略过:)
以下代码只能下载指定页面的:(,望大神指教,谢过!
<?php
$url = "http://site.com/";
$content=file_get_contents($url);
$reg="/<img.*?src=\"(.*?)\".*?>/";
preg_match_all($reg,$content,$matches);
$path = './imgDownload';
if(!file_exists($path)){
mkdir($path, 0777);
}
for($i = 0;$i < count($matches[1]);$i ++){
/*explode
$url_arr[$i] = explode('/', $matches[1][$i]);
$last = count($url_arr[$i])-1;
*/
//strrchr
$filename = strrchr($matches[1][$i], '/');
downImage($matches[1][$i],$path.$filename);
//downImage($matches[1][$i],$path.'/'.$url_arr[$i][$last]);
}
function downImage($url,$filename="") {
if($url=="") return false;
if($filename=="") {
$ext=strrchr($url,".");
if($ext!=".gif" && $ext!=".jpg" && $ext!=".png" && $ext!="jpeg") return false;
$filename=date("YmdHis").$ext;
}
ob_start();
//make file that output from url goes to buffer
readfile($url);
//file_get_contents($url); 这个方法不行的!!!只能用readfile
$img = ob_get_contents();
ob_end_clean();
$fp=@fopen($filename, "a");//append
fwrite($fp,$img);
fclose($fp);
return $filename;
}
代碼寫得太糟糕了,還有幾處錯誤,幫你重寫一份。
在一個循環里多次調用
addPage
就行了。如果已經有 url 的話,也可以直接調用
download
。效率有點低,可以考慮改用
culr_multi_*
系列函數。可以使用
curl_multi_*
系列函数批量请求远程地址。 把所有需要请求的页面放到一个数组里,每次并发20个去请求。建议修改下程序思路,先批量根据页面地址获取需要下载的图片地址,第二步再批量处理图片下载。
两个部分的都可以用
culr_multi_*
系列函数去并发处理。