PHP生成迅雷、快车、QQ旋风下载链接的实例
在一些资源下载共享站点中,我们经常遇到需要在下载页中添加各种下载工具链接的情况。传统的利用各下载工具官方提供的脚本(.js)生成链接的方式,其弊端已日渐突出,如加载速度慢、客户端兼容性问题等。
本文将介绍如何通过 PHP 函数处理,轻松生成制作各种第三方下载工具的链接数据,并直接输出到前台上。
该功能所用到的 PHP 函数:
1. base64_encode: 用于以 base64 方式加密字符串;
2. base64_decode: 用于解密以 base64 方式加密的字符串。
例子1
以原始下载地址生成第三方工具下载链接 PHP 代码:
代码如下 | 复制代码 |
$url = 'http://www.example.com/document.zip'; |
从第三方工具下载链接还原成原始链接 PHP 代码:
代码如下 | 复制代码 |
$url_old = ''; |
例子2
代码如下 | 复制代码 |
<?php |
生成效果如下
远程图片保存功能以前介绍过很多php的例子,这里我给大家介绍一个php+ajax的例子,希望本例子给你会有所帮助。先看效果
实现原理
发送请求 :将输入的目标网址及保存路径名称采用AJAX异步的方式发送到image.info.php文件,该文件中包含有一个ImageCatch类,注意:因为有一个是指定目标图片抓取,一个是只要指定一个网址,如http://www.111cn.net形式,所以还要有一个参数用来判断是指定目标抓取还是指定网站抓取。
接收请求 :接收发送过来的两个参数,目标网址及保存路径,实例化ImageCatch类,将地址及保存路径传进去,用file_get_contents函数将目标地址的内容读取赋值给一个变量$content。
先说指定图片抓取的实现 :指定图片抓取的方法实现比较简单,直接用file_get_contents函数将图片读取到,再用file_put_contents写入到一个文件保存起来就可以了。
指定网址抓取图片的实现
方法跟指定图片地址抓取就有点不一样了,因为采用的是jquery+ajax无刷新模式抓取,所以,请求要一次一次发,先说第一次发什么请求,很显然,第一次发的请求内容是获取目标网址的所有图片地址及图片总数,那要怎样获取目标网址的所有图片地址呢?思路跟上面的一样,但方法不同;
第一步:用file_get_contents函数读取目标网址赋值给一个content变量。
第二步:用正则匹配所有img标签里的src属性,并保存在一个数组,这样网页的图片地址就已经拿到了
第三步:用正则匹配所有样式表文件link标签的href属性,并保存在一个数组$arr1
第四步:还是用file_get_contents函数读取获取的样式表文件,再用正则去匹配到css样式里的url背景图片地址,并保存在一个数组$arr2,这样css样式的图片又拿到了
第五步:将$arr1和$arr2用array_merge函数进行合并成$arr,再用一个数组$arr3(‘total’=>count($arr))得出图片总数并追加到数组$arr里面去,这样图片地址和总数都拿到了
第六步:用json_encode编译一个返回json数据 第七步:接收返回回来的json数据,将数据都存入一个数组,判断是否数组为空,不为空,则用函数递归的方法调用一个函数,每调用一次,在返回结果后就将该数组的第一个元素去掉,再判断数组是否为空,不为空,则继续发送抓取请求,直到数组为空,全部图片就已经都抓取完毕。
好了现在看例子
index.php
代码如下 | 复制代码 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>PHP远程图片抓取</title> <style> body { margin:0; padding:0; } #content { width:90%; height:auto; margin:0 auto; margin-top:20px; font-size:12px; color:#333; } #content .h1 { width:100%; line-height:30px; text-align:left; } #content .h2 { width:100%; line-height:30px; text-align:left; } #content .Schedule { width:auto; height:12px; margin:15px 0px; display:none; background:url() } #content ul { width:100%; height:auto; margin-top:10px; } #content ul li { height:24px; line-height:24px;} #content font { color:#f00; } </style> <script type="text/javascript" src="js/jquery.js"></script> <script> $(document).ready(function() { var TargetUrl; var Save; function error(info) { $('#content .h2 font').text(info); } function statusInfo(info) { $('#content ul').append('<li>'+info+'</li>'); } //禁用按钮 function start_d() { $('#Single,#more').attr('disabled','disabled'); } //解放按钮 function start_s() { $('#Single,#more').removeProp('disabled'); } //进度跳转 function href() { location.href='#bottom'; } //单个图片抓取 $('#content .h1 #Single').click(function() { TargetUrl=$('#content .h2 .TargetUrl').val(); Save=$('#content .h2 .Save').val(); if (TargetUrl=='') { error(' * 请填写目标网址'); return; } if (Save=='') { error(' * 请填写保存目录'); return; } var zurl=new Array(TargetUrl); start_d(); Crawl(zurl,Save); }); function Crawl(zurl,Save) { start_d(); $('#content .Schedule').show(); if (zurl.length>0) { var curl=zurl[0]; $.ajax({ url:'image.info.php?Single=Single', dataType:'json', type:'POST', data:'TargetUrl='+curl+'&Save='+Save, success: function(data) { if (data.status=='ok') { statusInfo('远程图片 <font>'+curl+'</font> 抓取成功 已保存在 <font>'+data.FileSave+'</font> 文件大小:<font>'+data.FileSize+'</font>'); zurl.shift(); //删除第一个数组元素并返回 Crawl(zurl,Save); //使用函数递归 href(); }else { zurl.shift(); //删除第一个数组元素并返回 Crawl(zurl,Save); //使用函数递归 statusInfo(data.status); //显示失败信息 $('#content .Schedule').hide(); //隐藏LOADING图片 start_s(); //按钮启用 href(); } } }); }else { $('#content .Schedule').hide(); statusInfo('图片抓取完毕'); start_s(); href(); } } //多个图片抓取 $('#content .h1 #more').click(function() { TargetUrl=$('#content .h2 .TargetUrl').val(); Save=$('#content .h2 .Save').val(); if (TargetUrl=='') { error(' * 请填写目标网址'); return; } var str=/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/; if (!str.test(TargetUrl)) { error(' * 目标网址不正确'); return; } if (Save=='') { error(' * 请填写保存目录'); return; } start_d(); $('#content .Schedule').show(); $.ajax({ url:'image.info.php?more=more', dataType:'json', type:'POST', data:'TargetUrl='+TargetUrl+'&Save='+Save, success: function(data) { if (data[0]!='no') { statusInfo('在目标网址 <font>'+TargetUrl+'</font> 找到 <font>'+data['total']+'</font> 张图片,现正在进行抓取....'); var zurl=new Array(); for (i=0; i<data['total']; i++) { zurl.push(data[i]); } Crawl(zurl,Save); }else { statusInfo("未抓取找到任何图片"); $('#content .Schedule').hide(); start_s(); } } }); }); $('#clear').click(function() { $('#content ul li').remove(); }); }); </script> </head> <body> <div id="content"> <h1>PHP远程图片抓取程序</h1> <div class="h1"> 指定图片抓取:<input type="button" value=" 开始抓取 " id="Single" /> <font>目标网址如:http://www.111cn.Net/123.jpg</font> 指定网址抓取:<input type="button" value=" 开始抓取 " id="more" /> <font>目标网址如:http://www.111cn.Net</font> <input type="button" value=" 清空状态信息 " id="clear" /> </div> <div class="Schedule"><font>正在抓取,请稍后...</font> <img src="loading.gif" border="0" /></div> <div class="h2">目标网址:<input type="text" class="TargetUrl" size="40" /> 保存地址:<input type="text" class="Save" /><font></font></div> <ul> </ul> <a name="bottom"></a> </div> </body> </html> |
images.info.php
代码如下 | 复制代码 |
<?php |
碰到页面程序执行超时时会提醒Fatal error: Maximum execution time of 300 seconds exceeded 是因为程序执行时间超过了最大允许执行时间,解决办法我总结了好几个大家选择适合自己的吧。
对于函数我们可以常用下面方法,直接给函数设置超时时间。
代码如下 | 复制代码 |
declare(ticks = 1); function a(){ sleep(10); echo "a finishi "; } function b(){ echo "Stop "; } function c(){ usleep(100000); } function sig(){ throw new Exception; } try{ pcntl_alarm(1); pcntl_signal(SIGALRM, "sig"); a(); pcntl_alarm(0); }catch(Exception $e){ echo "timeout "; } b(); a(); b(); |
来操作
对于文件或程序代码可使用set_time_limit只是设置你的PHP程序的超时时间
解决方法:
1. 修改php.ini文件:
代码如下 | 复制代码 |
max_execution_time = 30 ; // Maximum execution time of each script, in seconds |
原值30秒,你可以改大点。
改完后记得重启php。该方法改了后对所有程序生效。
2. 修改你的程序,在你需要耗时超过默认值(30秒)的脚本中,加入代码:
代码如下 | 复制代码 |
set_time_limit(300); // 最大执行时间这里设置300秒 |
设置成0表示不限时。
php生成word文档比excel感觉要方便多了,他只要设置一下头部信息我们就可以直接使用fopen来实现读取操作,下面看几个例子。
php直接用fopen生成的核心代码是
代码如下 | 复制代码 |
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">'.你的放的数据.'</html> |
例子
代码如下 | 复制代码 |
function word($data,$fileName=''){ |
示例如下:
代码如下 | 复制代码 |
<?php |
为了方便使用我们把它整理成一个类文件
代码如下 | 复制代码 |
<?php function start() } function save($path) print "</html>"; ob_end_clean(); $this->wirtefile ($path,$data); function wirtefile ($fn,$data) $fp=fopen($fn,"wb"); } ?> |
使用方法超级简单
代码如下 | 复制代码 |
$word->start(); |
查询mysql数据生成word也是非常的简单我们只要连接数据库,然后把数据库的内容存放在类的$word字段中,然后再利用$word->start();生成即可。
今天发现本站的上一页与下一页出现有问题,上一页没有问题但是在下一页是直接到了本频道最新发布的文章了,按原理应该是文章本身ID的前与后的ID才是上下页吧,下面我来与大家详细讲述一下。先看个例子
1,2,3,4,5
假如上面5个是ID了,我要对上一页排序直接使用order by id desc ,如我当前ID为3那么出来的是2才对,对下一页我们要用order by id asc得出的排序应该是,4,好了原理就这么简。
sql实现方法
代码如下 | 复制代码 |
上一页 $sql ="Select 字段 from 表名 where id<3 order by id desc limit 1"; 下一页 $sql ="Select 字段 from 表名 where id>3 order by id asc limit 1"; |
得出的结果与我们想的是一样的,好了最后我把自己以前写的一个函数分享给各位。
代码如下 | 复制代码 |
/* |
注意:本站原创教程转载必须注明来源http://www.111cn.net 否则后果自负
相关文章
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 本文实例讲述了jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果。分享给大家供大家参考,具体如下:这里演示jQuery实现鼠标移动到链接上,滑动展开/隐藏图片效果,鼠标放在“上一页”“下一页”上,立即浮现出所对应的图...2015-10-30
- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了Visual Studio 2015下载和安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
- 经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
- js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
- 大家用百度搜索的时候,可能会发现,结果链接用的还是百度的链接,点击之后才会跳转到另外一个页面,另外一个页面的真实链接如何获取到呢?? 通过分析发现: 可以看出,返回...2016-05-19
- 验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
- 复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
- 一般来说, 我们可以通过直接让URL指向一个位于Document Root下面的文件, 来引导用户下载文件.但是, 这样做, 就没办法做一些统计, 权限检查, 等等的工作. 于是, 很多时候, 我们采用让PHP来做转发, 为用户提供文件下载...2014-06-07
- 这篇文章主要介绍了Javascript前端下载后台传来的文件流代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-19
- 这篇文章主要为大家详细介绍了C#开发教程之FTP上传下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 解决办法:$str=”QB”.str_pad(($maxid[0]["max(id)"]+1),5,”0″,STR_PAD_LEFT ); 其中$maxid[0]["max(id)"]+1) 是利用max函数从数据库中找也ID最大的一个值, ID为主键,不会重复。 str_pad() 函数把字符串填充为指...2013-10-04
- 这篇文章主要介绍了C#生成Word文档代码示例,本文直接给出代码实例,需要的朋友可以参考下...2020-06-25
ASP.NET中iframe框架点击左边页面链接 右边显示链接页面内容
这篇文章主要介绍了ASP.NET中iframe框架点击左边页面链接,右边显示链接页面内容的实现代码,感兴趣的小伙伴们可以参考一下...2021-09-22