首页 > 代码库 > php批量下载图片
php批量下载图片
某论坛上有个爆照帖,帖子都顶到一千多楼了。为了满足窥私欲,故需要设计一批量下载指定用户名图的程序。
之前的想法是直接用js实现,查了下说是用fso可以实现,其实从来没用过,看了下应该是对文件的操作,我估计可能不行。用js可以提取出下载的url,然后再在服务端进行下载。而提取url可以采取ajax轮询的操作,对n页进行ajax轮询,返回网页源码,新建一个div标签,将源码作为div标签的innerHTML内容插入,接下去就是dom的操作了~
服务端图片下载php代码:
1 <?php 2 function downloadFile($url, $savePath, $name = ‘‘) 3 { 4 if ($name == ‘‘) 5 { 6 $header = get_headers($url, 1); 7 // 如果链接进行过跳转则匹配 location 之后的链接中的文件名 8 if (isset($header[‘Location‘])) { 9 $name = basename(str_replace(strstr($header[‘Content-Type‘][1], ‘?‘), ‘‘, $header[‘Location‘]));10 // 如果没有找到文件名则自动以当前时间为名称11 $name = ($name == ‘‘) ? time() . str_replace(‘/‘, ‘‘, strstr($header[‘Content-Type‘][1], ‘/‘)) : $name;12 } else {13 $name = basename(str_replace(strstr($header[‘Content-Type‘], ‘?‘), ‘‘, $url));14 }15 }16 return file_put_contents($savePath .‘/‘. $name, file_get_contents($url));17 }18 19 //保存图片路径20 $savePath = dirname(__FILE__)."\images";21 downloadFile($url, $savePath);22 // downloadFile($_POST[‘content‘], $savePath);23 // $a = dirname(__FILE__);24 // echo $a;25 ?>
而客户端因为要进行ajax操作,所以写个同域的用户脚本就显得方便多了。对每页进行ajax操作后,回调函数中将回调的源码插入div中,然后对div进行dom操作,对用户名进行判断,如果符合,则对该层的img图片进行操作,提取url,post给后台,后台就可以下载了。详见注释
客户端js代码:
1 // ==UserScript== 2 // @name downloadpic 3 // @namespace http://www.cnblogs.com/bigbigsunrise 4 // @description 批量下载指定用户图片 5 // @include * 6 // @require http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js 7 // @grant GM_getValue 8 // @grant GM_setValue 9 // @grant GM_listValues10 // @grant GM_deleteValue11 // @author bigbigsunrise12 // ==/UserScript==13 14 $.noConflict();15 jQuery(document).ready(function($){16 // 跟帖的页码17 var firstindex = 1;18 var lastindex = 100;19 // url的前缀,自己定义20 var preurl = ‘...‘;21 for(var i = firstindex; i <= lastindex; i++) {22 jQuery.ajax ({23 type: ‘GET‘,24 url: preurl + i,25 dataType: ‘html‘,26 async: true, // 异步27 success: function (msg) {28 var a = document.createElement(‘div‘);29 // 插入dom树,可以进行dom操作30 a.innerHTML = msg;31 // 以下的JQ操作其实可以大幅度优化,因为没有时间限制,所以暂时不优化了32 var b = $(a).find(‘.pi‘).children(‘.authi‘).children(‘.xw1‘);33 for(var i = 0; i < b.size(); i++) {34 // 用户名的判断,自己定义35 if(b.eq(i).html() === ‘username‘) {36 var c = b.eq(i).parent().parent().parent().parent().find(‘.t_fsz‘).find(‘img‘);37 for(var j = 0; j < c.size(); j++) {38 // 获取url39 var src = http://www.mamicode.com/c.eq(j).attr(‘file‘);40 if(!src) continue;41 if(src.charAt(0) === ‘h‘)42 download(src);43 else 44 // 自己定义45 download(‘http://.../‘ + src);46 }47 }48 }49 }50 });51 }52 });53 54 function download(src) {55 $.ajax({56 type: ‘POST‘,57 url: ‘http://127.0.0.1/download/index.php‘,58 // dataType: ‘‘,59 async: false,60 // post的内容61 data: {content:src},62 success: function(msg) {63 // alert(msg);64 }65 });66 }
这里说明下,js代码的第二个ajax其实是跨域了,控制台报错了不知道为什么还能继续执行。另外,如果知道了要下载的url,可以直接在后台定义数组,而邮件的发送则不能直接后台for循环操作,此处mark。
php批量下载图片
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。