php实现图片批量下载到本地实例(可采防盗链)
对于没有防盗链的图片
代码如下 | 复制代码 |
/* * 对于没有防盗链的图片 * $url 图片地址 * $filename 图片保存地址 * return 返回下载的图片路径和名称,图片大小 */ function GrabImage($url,$filepath,$filename="") { if($url=="") return false; $ext=strrchr($url,"."); if($filename=="") { if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false; $filename=date("YmdHis"); } ob_start(); readfile($url); $img = ob_get_contents(); ob_end_clean(); $size = strlen($img); // 图片大小 !is_dir(getcwd().$filepath)? mkdir(getcwd().$filepath):null;//生成文件夹 $fp2=fopen(getcwd().$filepath.$filename.$ext, "a"); fwrite($fp2,$img); fclose($fp2); return array($filepath.$filename.$ext,$size); } |
有防盗链的图片
代码如下 | 复制代码 |
/* * 有防盗链的图片 * $url 图片地址 * $filename 图片保存地址 * return 返回下载的图片路径和名称,图片大小 * $fromurl 来源URL,填写来源图片网址可破解防盗链 */ function GrabImage2($url,$filepath,$filename="",$fromurl) { if($url=="") return false; $ext=strrchr($url,"."); if($filename=="") { if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false; $filename=date("YmdHis"); } !is_dir(getcwd().$filepath)? mkdir(getcwd().$filepath):null;//生成文件夹 $re = $this->curlg($url,$fromurl); $size = file_put_contents(getcwd().$filepath.$filename.$ext,$re);//返回大小 return array($filepath.$filename.$ext,$size); } |
批量采集代码:
代码如下 | 复制代码 |
/** * 批量下载图片 */ public function downimg(){ $keep = $this->_get("keep");//1从缓存获取2删除缓存/重新缓存 $id = $this->_get("id"); $id = $id?$id:0; $nextid = $id+1; if($keep!=1){ $data = M('Cjlist')->where("status=1")->select(); S("keepcjdata",$data,3600); }else{ $data = S("keepcjdata"); } $endid= count($data); //echo $id; //echo $endid; if($endid==$id){ exit('所有图片下载完成!'); } //echo $endid; $data2['cover_imgurl'] = $this->imgdown2($data[$id]['cover_imgurl']); //echo $data[$id]['thum_url']; $data2['thum_url'] = $this->imgdown2($data[$id]['thum_url'],'thum_');//中型图片type $data2['id']=$data[$id]['id']; if(!$data2['thum_url'] || !$data2['cover_imgurl']){ $data2['status']=-1; }else{ $data2['status']=2; } $res = M('Cjlist')->save($data2); //$this->echosql(); if($res){ echo '下载完成ID:'.$data2['id']." 前往下一个ID下载<script>window.location.href='".U('Index/downimg')."/keep/1/id/".$nextid."'</script>"; }else{ echo '保存出错,正在重试刷新。<script>window.location.reload()</script>'; } //dump($data2); //dump($data); } |
同时还可以生成缩略图哦
代码如下 | 复制代码 |
/* |
在PHP中,没有默认的Function来获取目前所在页面的URL,所以今天就向大家介绍一个在PHP获取当前页面完整URL的PHP函数
代码
函数代码如下,调用时只需要使用 curPageURL() 就行啦!
代码如下 | 复制代码 |
/* 获得当前页面URL开始 */ |
补充一下server参数说明
代码如下 | 复制代码 |
//获取域名或主机地址 //获取网页地址 //获取网址参数 //获取用户代理 //获取完整的url //包含端口号的完整url //只取路径 |
例子
代码如下 | 复制代码 |
$postInfo['answer2'] ='可以的,商业贷款可摊还36%,公积金贷款可摊还16%|||可以先把账户里的余额提取出来用作首付,然后每个月贷款商业贷款可摊还36%,公积金贷款可摊还16%|||可以的,现在甲类公积金是摊还比例http://www.111cn.net是工资基数的34%|||啊啊啊啊啊啊啊啊是的|||可以摊还,甲类34% preg_match_all("/http:[\/]{2}[a-z]+[.]{1}[a-z\d\-]+[.]{1}[a-z\d]*[\/]*[A-Za-z\d]*[\/]*[A-Za-z\d]*/",$postInfo['answer2'],$array2); print_r($array2); 结果就为 ( ) |
注意:
301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:
301 redirect: 301 代表永久性转移(Permanently Moved),
302 redirect: 302 代表暂时性转移(Temporarily Moved ),
例子
在php中正常的临时跳转通常使用:
代码如下 | 复制代码 |
<?php header("Location:your_dest_url"); ?> |
最简单的做法
代码如下 | 复制代码 |
$the_host = $_SERVER['HTTP_HOST'];//取得当前域名 |
这个还可以实现比如111cn.net 跳转到www.111cn.net 上,也就是让所有的页面都用带www的网址
代码如下 | 复制代码 |
<?php |
7、Apache下301转向代码
新建.htaccess文件,输入下列内容(需要开启mod_rewrite):
1)将不带WWW的域名转向到带WWW的域名下
代码如下 | 复制代码 |
Options +FollowSymLinks |
2)重定向到新域名
代码如下 | 复制代码 |
Options +FollowSymLinks |
wordpres根目录301跳转
代码如下 | 复制代码 |
# BEGIN WordPress |
测试
分析:
php 301跳转代码只适合于全php页面或单页面做跳转了,apache/iis 301跳转适用于大量的网站域名301跳转了,他们两共同点都是实现301但两者各人有优点吧,大家自行根据自己情况选择吧。
下面来简单的介绍在php中get_meta_tags()、CURL与user-agent信息对比情况,如果你对于这篇文章有兴趣可进入参考学习。get_meta_tags()函数用于抓取网页中<meta name="A" content="1"><meta name="B" content="2">形式的标签,并装入一维数组,name为元素下标,content为元素值,上例中的标签可以获得数组:array('A'=>'1', 'b'=>'2')。其他<meta>标签不处理,并且此函数只处理到</head>标签时截止,之后的<meta>也不再继续处理,不过<head>之前的<meta>还是会处理。
user-agent是浏览器在向服务器请求网页时,提交的不可见的头信息的一部分。头信息是一个数组,包含多个信息,比如本地缓存目录,cookies等,其中user-agent是浏览器类型申明,比如IE、Chrome、FF等。
今天在抓取一个网页的<meta>标签的时候,总是得到空值,但是直接查看网页源代码又是正常的,于是怀疑是否服务器设置了根据头信息来判断输出。先尝试使用get_meta_tags()来抓取一个本地的文件,然后这个本地文件将获取的头信息写入文件,结果如下(其中替换成了/,方便查看):
代码如下 | 复制代码 |
array ( |
果然在数组中没有HTTP_USER_AGENT这个元素,apache在向另外一台服务器发送请求的时候是没有UA的。之后查了一下资料,get_meta_tags()函数没有伪造UA的能力,所以只能使用其他办法解决了。
后来使用CURL来获取,就获取到了网页,不过使用上稍微麻烦一点,首先伪造UA,获取之后在使用正则表达式分析<meta>
伪造办法:
代码如下 | 复制代码 |
// 初始化一个 cURL // 设置你需要抓取的URL // 设置是否将文件头输出到浏览器,0不输出 // 设置UA,这里是将浏览器的UA转发到服务器,也可以手动指定值 // 设置cURL 参数,要求结果返回到字符串中还是输出到屏幕上。0输出屏幕并返回操作结果的BOOL值,1返回字符串 // 运行cURL,请求网页 // 关闭URL请求 // 处理获得的数据 |
相关文章
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
- 图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
- 这篇文章主要为大家详细介绍了Visual Studio 2015下载和安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
- PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
- 这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
C#中图片旋转和翻转(RotateFlipType)用法分析
这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25- ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
- 这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29
- 本文主要介绍用C#实现图片转换成字节流,字节流转换成图片,并根据图片路径返回图片的字节流,有需要的朋友可以参考下...2020-06-25