真的是什么样的需求都有啊,的确也是,很多人并不指定将图片另存来保存图片,但很多程序不知道如何下载图片,其实下载图片和下载其他文件是一样的,只是其他文件直接访问就可以下载,但是图片会被浏览器解析,其实也是下载下来了,只是放到了浏览器的缓冲目录中,我们所有在网页上看到的东西其实都已经下载下来了。下面就总结两个代码,一个是下载图片的,其实也可以用在下载其他的文件,一个是获取远程图片保存到服务器中。
第一个,图片下载代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php $file_name="哈哈.jpg";//需要下载的文件 $file_name=iconv("utf-8","gb2312","$file_name"); $fp=fopen($file_name,"r+");//下载文件必须先要将文件打开,写入内存 if(!file_exists($file_name)){//判断文件是否存在 echo "文件不存在"; exit(); } $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=".$file_name); //防止服务器瞬时压力增大,分段读取 $buffer=1024; while(!feof($fp)){ $file_data=fread($fp,$buffer); echo $file_data; } //关闭文件 fclose($fp); ?> |
第二个,获取远程图片代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?php function GrabImage($url,$filename=""){ if($url=="")return false; if($filename==""){ //取得远程图片的名称 $ext=strrchr($url,"."); //当扩展名为gif,jpg,png,bmp以外时返回false,结束处理。 if($ext!=".gif" && $ext!=".jpg" && $ext!=".png" && $ext!=".bmp") return false; //生成基于时间和日期的本地文件名。 $filename=date("dMYHis").$ext; } //打开浏览器缓冲区。 ob_start(); //将文件读入到缓冲。 readfile($url); //得到缓冲区的内容并且赋值给变量$img。 $img = ob_get_contents(); //关闭并清空缓冲. ob_end_clean(); //在本地创建新文件$filename,并将读入内容存入其中。 $fp2=@fopen($filename,"a"); fwrite($fp2,$img); fclose($fp2); return $filename; } ?> <html> <head> <title>图片下载</title> </head> <body> <!--action属性中设置为"getPic.php",即提交给自己处理。--> <form method="post" action=""> 图片URL; <input type="text" name="url" size="80" /> <input type="submit" name="submit" value="提交" /><br /> <?php //没有单击"提交"按钮时$_POST['submit']的值为NULL,只有单击提交按钮后才被执行。 if(@$_POST['submit'] != null){ //调用自定义函数GrabImage,进行图片下载处理。如果需要下载一系列的远程图片,只要设法将远程图片URL传过来,循环调用GrabImage函数。 $img=GrabImage(@$_POST['url']); if($img) echo '<pre><img src="'.$img.'"></pre>'; else echo '下载失败'; } ?> </form> </body> </html> |
有兴趣的同学可以拿去试一下,对理解文件操作应该有帮助!
本文链接:http://www.521php.com/archives/836/
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/836/