php 三种文件下载的实现

1、直接添加文件链接

<span style="color:#000000"><code><span style="color:navy"><button></span>
    <span style="color:navy"><a <span style="color:teal">href</span> = "<span style="color:teal">http:</span>//<span style="color:teal">localhost</span>/<span style="color:teal">down.zip</span>"></span>
    下载文件
<span style="color:navy"></button></span></code></span>

点击该按钮下载:

1

2、传递参数查找并跳转到下载链接

传递参数:

<span style="color:#000000"><code><span style="color:navy"><span style="color:#dd1144"><button>
    <a href = "</span><span style="color:#dd1144">http:</span>//<span style="color:teal">localhost</span>?<span style="color:teal">f</span>=<span style="color:#dd1144">'down'</span><span style="color:#dd1144">">
    下载文件
</button></span></span></code></span>
<span style="color:#000000"><code><span style="color:#999999"><strong><?php</strong></span>

<span style="color:teal">$down</span> = <span style="color:teal">$_GET</span>[<span style="color:#dd1144">'f'</span>];   <span style="color:#999988"><em>//获取文件参数</em></span>
<span style="color:teal">$filename</span> = <span style="color:teal">$down</span>.<span style="color:#dd1144">'.zip'</span>; <span style="color:#999988"><em>//获取文件名称</em></span>
<span style="color:teal">$dir</span> =<span style="color:#dd1144">"down/"</span>;  <span style="color:#999988"><em>//相对于网站根目录的下载目录路径</em></span>
<span style="color:teal">$down_host</span> = <span style="color:teal">$_SERVER</span>[<span style="color:#dd1144">'HTTP_HOST'</span>].<span style="color:#dd1144">'/'</span>; <span style="color:#999988"><em>//当前域名</em></span>


<span style="color:#999988"><em>//判断如果文件存在则跳转到下载路径</em></span>
<span style="color:#333333"><strong>if</strong></span>(file_exists(<span style="color:#333333"><strong>__DIR__</strong></span>.<span style="color:#dd1144">'/'</span>.<span style="color:teal">$dir</span>.<span style="color:teal">$filename</span>)){
    header(<span style="color:#dd1144">'location:http://'</span>.<span style="color:teal">$down_host</span>.<span style="color:teal">$dir</span>.<span style="color:teal">$filename</span>);
}<span style="color:#333333"><strong>else</strong></span>{
    header(<span style="color:#dd1144">'HTTP/1.1 404 Not Found'</span>);
}</code></span>

结果:

文件存在

2

文件不存在

  • 3

3、head() 和 fread()函数把文件直接输出到浏览器

<span style="color:#000000"><code><span style="color:#333333"><?</span>php  
<span style="color:teal">$file_name</span> <span style="color:#333333">=</span> <span style="color:#dd1144">"down"</span>;
<span style="color:teal">$file_name</span> <span style="color:#333333">=</span> <span style="color:#dd1144">"down.zip"</span>;     <span style="color:#999988"><em>//下载文件名    </em></span>
<span style="color:teal">$file_dir</span> <span style="color:#333333">=</span> <span style="color:#dd1144">"./down/"</span>;        <span style="color:#999988"><em>//下载文件存放目录    </em></span>
<span style="color:#999988"><em>//检查文件是否存在    </em></span>
<span style="color:#333333"><strong>if</strong></span> (<span style="color:#333333">!</span> file_exists ( <span style="color:teal">$file_dir</span> <span style="color:#0086b3">.</span> <span style="color:teal">$file_name</span> )) {    
    <span style="color:#333333"><strong>header</strong></span>(<span style="color:#dd1144">'HTTP/1.1 404 NOT FOUND'</span>);  
} <span style="color:#333333"><strong>else</strong></span> {    
    <span style="color:#999988"><em>//以只读和二进制模式打开文件   </em></span>
    <span style="color:teal">$file</span> <span style="color:#333333">=</span> fopen ( <span style="color:teal">$file_dir</span> <span style="color:#0086b3">.</span> <span style="color:teal">$file_name</span> <span style="color:#dd1144">"rb"</span> ); 

    <span style="color:#999988"><em>//告诉浏览器这是一个文件流格式的文件    </em></span>
    <span style="color:#333333"><strong>Header</strong></span> ( <span style="color:#dd1144">"Content-type: application/octet-stream"</span> ); 
    <span style="color:#999988"><em>//请求范围的度量单位  </em></span>
    <span style="color:#333333"><strong>Header</strong></span> ( <span style="color:#dd1144">"Accept-Ranges: bytes"</span> );  
    <span style="color:#999988"><em>//Content-Length是指定包含于请求或响应中数据的字节长度    </em></span>
    <span style="color:#333333"><strong>Header</strong></span> ( <span style="color:#dd1144">"Accept-Length: "</span> <span style="color:#0086b3">.</span> filesize ( <span style="color:teal">$file_dir</span> <span style="color:#0086b3">.</span> <span style="color:teal">$file_name</span> ) );  
    <span style="color:#999988"><em>//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。</em></span>
    <span style="color:#333333"><strong>Header</strong></span> ( <span style="color:#dd1144">"Content-Disposition: attachment; filename="</span> <span style="color:#0086b3">.</span> <span style="color:teal">$file_name</span> );    

    <span style="color:#999988"><em>//读取文件内容并直接输出到浏览器    </em></span>
    echo fread ( <span style="color:teal">$file</span> filesize ( <span style="color:teal">$file_dir</span> <span style="color:#0086b3">.</span> <span style="color:teal">$file_name</span> ) );    
    fclose ( <span style="color:teal">$file</span> );    
    exit ();    
}    </code></span>

结果:和第二个一样

总结:第一个和第二个操作比较简单,但是容易暴露文件的真实地址,安全性不高,第三种能够较好的把文件的真实地址隐藏起来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值