PHP安全下载文件

来源:互联网 发布:java hikariconfig 编辑:程序博客网 时间:2024/05/03 07:19

    需要下载的是一个文件名为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 ();        }        ?>  

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

0 0