最近做了一个简单的小项目http://ganen.medlive.cn/
这算是我学了php一个月以来第一次把自己学到的知识付诸实践,虽然有不少功能都是杜神写的,但是我还是做了一些简单的贡献。
在实现了生成海报的功能之后,接下来还有三个功能等待实现。
由于微信分享和新浪微博的分享已经做过了,并且可以使用,所以我就先做了下载图片的功能。
关于下载图片的功能,其实有多种方式实现。
先将比较复杂的PHP实现的方法。
PHP实现下载方式,基本上是浏览器发送一个请求,请求访问服务器中某个脚本,比如download.php。然后执行该文件的代码实现下载。
如图
而在浏览器运行待下载的文件的时候,必然要把待下载的文件读入内存中,这里通过fopen()函数完成该动作,接下来就是从内存中读取文件,通过fread()函数完成该动作。
有一点可能需要注意,就是如果文件比较大。文件通常会分成多段返回给客户端,并不是等文件在服务端全部读取完毕后,一次性返回给客户端,因为这样子会增加服务器的符合。所以我们需要在php代码中设置一次读取的字节数,比如我在下面的代码中通过$buffer=1024设置一次读取的字节数,没读取一次,就输出数据(即返回给浏览器)
比如。。
<form class="J_form_download" method="post" action="download.php">
<input name="url" value="" type="hidden">
</form>
用js可以实现对这么form的控制,当我利用js实现form的提交操作,那么就是寻找并执行这个download.php文件。
这个时候就可以把你想用download.php实现你想要的下载的功能。具体怎么实现的看下面这段代码:
<?php
/**
* 文件下载
*
**/
header("Content-type:text/html;charset=utf-8");
download('web/magento-1.8.1.0.zip', 'magento下载');
function download($file, $down_name){
$suffix = substr($file,strrpos($file,'.')); //获取文件后缀
$down_name = $down_name.$suffix; //新文件名,就是下载后的名字
//判断给定的文件存在与否
if(!file_exists($file)){
die("您要下载的文件已不存在,可能是被删除");
}
$fp = fopen($file,"r");
$file_size = filesize($file);
//下载文件需要用到的头
header("Content-typ