PHP安全下载文件

    需要下载的是一个文件名为xxx.rar的文件,首先创建文件是download.php的PHP文件。通过前面的例子很容易通过文件的ID号从数据库中得到待下载文件的真实位置,在获得文件的真实存储位置后,可以通过header()函数的location参数直接重定向到这个文件。但是这样仍然是不安全的,因为某些下载软件还是可以通过重定向分析获得该文件的位置信息。因此需要用另外一种方法,就是PHP的文件处理API函数。它是通过fread()函数把文件直接输出到浏览器提示用户下载,这样所有的处理都是在服务器端完成的,因此用户就无法获得文件具体存储位置信息的,示例代码如下:

界面代码:

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
		
		<a href="downfile.php">pigcms文件下载</a>

</body>
</html>

downfile.php代码:

    $file_name = "pigcms.rar";     //下载文件名    
    $file_dir = "./file/";        //下载文件存放目录    
    //检查文件是否存在    
    if (! file_exists ( $file_dir . $file_name )) {    
        echo "文件找不到";    
        exit ();    
    } else {    
        //打开文件    
        $fp= fopen ( $file_dir . $file_name, "r" );    
        //输入文件标签     
        Header ( "Content-type: application/octet-stream" );    
        Header ( "Accept-Ranges: bytes" );    
        Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );    
        Header ( "Content-Disposition: attachment; filename=" . $file_name );    
        //输出文件内容     
        //读取文件内容并直接输出到浏览器    
        while(!feof($fp)) {
                         set_time_limit(0);
                         echo fread($fp,1024);
                         flush();
                         ob_flush();
                    } 
   
        fclose ( $fp);    
        exit ();    
    }    
    ?>  


这样没有暴露文件存放的位置,防止非法分子得到目录路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值