零艺江湖 - 行到水穷处,坐看云起时 | 个人生活记录 | 零艺客 - 下载
序[scode type="share"]有时候某些资源不好走直链或者需要设置下载限制的时候可以使用以下方法来达到目的，已实践代码，记录下。[/scode]实现代码[scode type="blue"]//下载的文件名称 $downname = date('Ymd').'.zip'; //需要下载文件所存放的目录 $file_name = __DIR__.'/temp/123.zip'; $fp = fopen($file_name, "r"); //获取文件的字节 $file_size = filesize($file_name); // 下载文件需要设置的协议头 Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length:" . $file_size); Header("Content-Disposition: attachment; filename=$downname"); //设置一次读取的字节数，每读取一次，就输出数据（即返回给浏览器） $buffer = 1024; $file_count = 0; //读取的总字节数 while (!feof($fp) && $file_count < $file_size) { $file_con = fread($fp, $buffer); $file_count += $buffer; echo $file_con; } fclose($fp); [/scode]
[scode type="blue"]这几天真的是躺中枪，经历了学校断电断网等一系列操作，又要面临新浪图床的折磨⌇●﹏●⌇。做为一位新浪图床的忠诚使用者，本站的一系列图片都存在的上面，现在那边不给调用了，郁闷Σ(っ °Д °;)っ。特地做了下面这个小程序，想要做一个自己的图库。说明：1.网络好的情况下5分钟可以爬取下载千余张图片到本地2.一键获取下载完成的文件名有服务器的可以爬完自己做图片API的图片API源码下载地址：https://www.lanzoui.com/i3wybkf[/scode]代码1 下载器 dow.php<?php set_time_limit(36000);//临时改变程序最长执行时间 function download($url,$_name){ $state = @file_get_contents($url,0,null,0,1);//获取网络资源的字符内容 if($state){ $ext = pathinfo($url,PATHINFO_EXTENSION); $dir = './img/';//图片储存地址 $allow_type = array('jpg','jpeg','gif','png'); //图片类型 if(in_array($ext, $allow_type)){//判断不是图片接口 $filename = $dir.$_name.'.'.$ext;//一般图片文件名称生成 }else{ $filename = $dir.$_name.'.png';//API图片文件名称生成 } if(!file_exists($dir)){ return false; }else{ ob_start();//打开输出 readfile($url);//输出图片文件 $img = ob_get_contents();//得到浏览器输出 ob_end_clean();//清除输出并关闭 $size = strlen($img);//得到图片大小 $fp2 = @fopen($filename, "a"); fwrite($fp2, $img.'png');//向当前目录写入图片文件，并重新命名 fclose($fp2); return $filename;//输出图片储存地址 } }else{ return false; } } function str_re($str){//处理特殊字符 $str = str_replace(' ', "", $str); $str = str_replace("\n", "", $str); $str = str_replace("\t", "", $str); $str = str_replace("\r", "", $str); return $str; } $str = explode("\n", file_get_contents('./dm/nanjie.txt'));//获取数据源 $k=count($str);//统计条数 $j = $k/90;//获取循环次数（一组90条测试时相对比较稳定） echo $j." "; for ($i=0; $i <= $j ; $i++) { $shu = 90*$i;//获取子循环总数 $cis = 90*($i+1);//获取子循环初始数 for ($n=$shu; $n < $cis ; $n++) { $sina_img = str_re($str[$n]);//获取指定数据 $url = 'http://ws2.sinaimg.cn/large/'.$sina_img.'.jpg';//设置链接 echo download($url,$sina_img).' '.$n.' ';//下载数据 } echo $i.' '.$shu.' '.$n." ";//输出当前组 } 代码2 文件名获取 name.php<?php //打开当前目录下的目录pic下的子目录common。 $handler = opendir('img'); /*其中$filename = readdir($handler) 每次循环时将读取的文件名赋值给$filename，$filename !== false。 一定要用!==，因为如果某个文件名如果叫'0′，或某些被系统认为是代表false，用!=就会停止循环 */ while( ($filename=readdir($handler))!==false){ //略过linux目录的名字为'.'和‘..'的文件 if($filename != "." && $filename != ".."){ //输出文件名 echo $filename." "; } } closedir($handler); [scode type="green"]转载请注明出处，原文地址：https://www.lykep.com/index.php/archives/254/[/scode]
翻了不少文章才找到的一段代码，修改了一下使它可以下载到图片API的图片。<?php function download($url){ $state = @file_get_contents($url,0,null,0,1);//获取网络资源的字符内容 if($state){ $ext = pathinfo($url,PATHINFO_EXTENSION); $dir = './';//图片储存地址 $allow_type = array('jpg','jpeg','gif','png'); //图片类型 if(in_array($ext, $allow_type)){//判断不是图片接口 $filename = $dir.time().'.'.$ext;//一般图片文件名称生成 }else{ $filename = $dir.time().'.png';//API图片文件名称生成 } if(!file_exists($dir)){ return false; }else{ ob_start();//打开输出 readfile($url);//输出图片文件 $img = ob_get_contents();//得到浏览器输出 ob_end_clean();//清除输出并关闭 $size = strlen($img);//得到图片大小 $fp2 = @fopen($filename, "a"); fwrite($fp2, $img.'png');//向当前目录写入图片文件，并重新命名 fclose($fp2); return $filename;//输出图片储存地址 } }else{ return false; } } echo download('http://qr.topscan.com/api.php?text='.time());