文章教程

2.2下载图片

9/17/2020 9:43:31 PM 人评论 次浏览

2.2 下载图片

经常在网上冲浪的朋友,下载图片对他们来说并不是什么困难的事情。无非是在浏览器上选中要下载的图片,单击鼠标右键,再弹出菜单中选择“图片另存为”后,就可以很方便地将其下载到本地。那么如何由程序来实现这个下载过程呢?本节将会讲解如何通过PHP来实现图片下载的功能,只需要将想下载图片的URL传递给程序,就能将其下载到本地。

alt

alt

本例要点

主要的处理过程其实非常简短,在PHP中有读取文件的函数readfile,函数readfile的功能是将文件的内容读入到浏览器缓冲,函数readfile可以读取本地文件也可以读取远程文件,使用者完全意识不到本地文件与远程文件的读取过程的不同。因为我们这里传入的是远程图片URL,随后将缓冲的数据取出,保存入本地的文件,就实现了整个下载过程。

另外,需要特别强调的是,必须注意缓冲处理函数ob_start()等的用法。本节最后的补充资料里有其功能的详细介绍。

目录结构

alt

定义图片下载函数GrabImage,变量说明:$url是远程图片的完整URL地址,不能为空。$filename是可选变量:如果为空,本地文件名将基于时间和日期自动生成。另外在实际应用时请务必确定您有把文件写入本地服务器的权限。

alt

取得远程图片文件的扩展名。

alt

当扩展名为gif,jpg,png,bmp以外时返回false,结束处理。

alt

生成基于时间和日期的本地文件名。

alt

打开浏览器缓冲区。

alt

将文件读入到缓冲。

alt

得到缓冲区的内容并且赋值给变量$img。

alt

关闭并清空缓冲。

alt

13到15行在本地创建新文件$filename,并将读入内容存入其中。

alt

action属性中设置为"getPic.php",即提交给自己处理。

alt

没有单击“提交”按钮时$_POST['submit']的值为NULL,因此30行到31行的代码只有在单击“提交”按钮后才被执行。

alt

调用自定义函数GrabImage,进行图片下载处理。如果需要下载一系列的远程图片,只要设法将远程图片URL穿过来,循环调用GrabImage函数即可,留给有兴趣的读者完成吧。

alt

补充

ob_start()函数

ob_start()函数是一个功能强大的函数,可以帮助我们处理许多问题。下面我们就来具体分析一下有关ob_start()函数的功能特点。

比如你用得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了通过ob_start()函数对缓冲区的控制,我们可以轻松地解决:

alt

用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法做到!其实上面本质上是将一些“过程”转化为“函数”的方法!

现在大家对ob_start()函数的功能有了一定的了解,上面的一个例子看似简单,但实际上已经掌握了使用ob_start()的要点。

(1)使用ob_start()函数打开浏览器的缓冲,这样可以保证缓冲的内容在你调用flush(),ob_end_flush()(或程序执行完毕)之前不会被输出。

(2)现在的你应该知道好处了:可以在任何输出内容后面使用header,setcookie以及session,这是ob_start()函数一个很大的特点;也可以使用ob_start的参数,在cache被写入后,然后自动运行命令,比如ob_start(”ob_gzhandler”);而我们最常用的做法是用ob_get_contents()得到缓冲中的内容,再进行处理。

(3)当处理完毕后,我们可以使用各种方法输出,flush(),ob_end_flush(),以及等到程序执行完毕后的自动输出。当然,如果你用的是ob_get_contents(),那么就要你自己控制输出方式了。


知识专栏:Apache/MySQL的自动启动(Windows环境)

在Windows环境中,安装Aache/MySQL时会自动在系统中设定自动启动。也就是说,Aache/MySQL会在计算机启动时,系统自动启动Apache/MySQL服务,用户根本不用关心其启动与否。

但是,在不经常使用Apache/MySQL的情况下,无条件地启动这些服务,浪费系统资源,使用户的系统负担过重。这个时候,可以将自动启动设置为无效。打开系统提供的“控制面板”→“管理工具”→“服务”工具,可以进行自动启动的有效/无效的切换。具体操作如图2-1和图2-2所示。

alt

图2-1 服务窗口

alt

图2-2 属性窗口

启动上述服务窗口后,在双击对应的服务(这里指“Apache2.2”或“MySQL”)后,就可以启动属性窗口。

在“启动种类”栏中,选择“手动”后,再单击“确定”按钮即可。这样就将自动启动服务变为无效了。另外,如果再想将自动启动服务改为有效,同样的步骤在“启动种类”中选择“自动”。


教程类别