PHP实现文件安全下载

原创 2002年01月07日 08:32:00

      你可能会笑我"下载文件"如此简单都值得说?当然并不是想象那么简单。例如你希望客户要填完一份表格,才可以下载某一文件,你第一个想法一定是用 "Redirect"的方法,先检查表格是否已经填写完毕和完整,然后就将网址指到该文件,这样客户才能下载,但如果你想做一个关于"网上购物"的电子商务网站,考虑安全问题,你不想用户直接复制网址下载该文件,笔者建议你使用PHP直接读取该实际文件然后下载的方法去做。程序如下:

            $file_name = "tianhys.exee";
            $file_dir = "/public/www/download/";
            if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
            echo "文件找不到";
            exit;
            } else {
            $file = 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);
            // 输出文件内容
            echo fread($file,filesize($file_dir . $file_name));
            fclose($file);
            exit;}


      而如果文件路径是"http" 或者 "ftp" 网址的话,则源代码会有少许改变,程序如下:

 

            $file_name = "tianhys.exe";
            $file_dir = "http://www.tianhys.org/";
            $file = @ fopen($file_dir . $file_name,"r");
            if (!$file) {
            echo "文件找不到";
            } else {
            Header("Content-type: application/octet-stream");
            Header("Content-Disposition: attachment; filename=" .$file_name);
            while (!feof ($file)) {
            echo fread($file,50000);
            }
            fclose ($file);
            }


      这样就可以用PHP直接输出文件了。

php中,高并发状态下文件的读写 (解决多线程同时读写一个文件的问题)

php中,高并发状态下文件的读写 Filed under: php/javascript — 标签:php, 并发, 文件 — 机器人 @ 4:08 下午 对于日IP不高或者说并发数不是很大的应...
  • Sparkjin
  • Sparkjin
  • 2013年08月06日 11:43
  • 1561

PHP-文件下载功能总结

文件的下载文件的下载一般有两种方式:1.通过超链接实现。地址为文件的地址 ,适用于浏览器解析不了的文件。像压缩文件、脚本文件等。假如文件是图片或者txt文档,就会直接在浏览器中打开,一般不建议用这种方...
  • garvisjack
  • garvisjack
  • 2017年02月16日 11:28
  • 1060

PHP安全下载文件

需要下载的是一个文件名为xxx.rar的文件,首先创建文件是download.php的PHP文件。通过前面的例子很容易通过文件的ID号从数据库中得到待下载文件的真实位置,在获得文件的真实存储位置后,可...
  • gaoxuaiguoyi
  • gaoxuaiguoyi
  • 2015年08月24日 15:59
  • 454

深入浅出php下的文件上传-确保文件上传安全

文件作为一种特殊的表单数据,通过http post请求方式提交至服务器的时候,php会生成一个$_FILES全局数组,相关的文件信息会存放在这个全局数组中。我将在这篇文章中通过一些示例代码来阐述php...
  • u014649204
  • u014649204
  • 2014年04月19日 16:21
  • 2077

【php】文件的上传与下载

php文件的上传与下载其实不难的,就那么的几行代码,比起JSP的要简单得多,具体可以参考:《【Servlet】利用Servlet3.0标准与JSTL表达式实现文件上传系统,支持图片上传后显示》(点击打...
  • yongh701
  • yongh701
  • 2015年04月11日 16:08
  • 2373

php文件批量下载

做了个照片墙,要提供批量下载照片的功能,如果你会文件下载,那批量也是小菜一碟,就是把文件打包压缩为  zip 文件再下载,而php的内置类ZipArchive()让你很容易实现。 首先,配置php.i...
  • u010373419
  • u010373419
  • 2013年07月28日 00:47
  • 2668

php文件打包下载

php 图片打包下载 1.新建类 namespace App\Http\Controllers\Admin; use App\Http\Controllers\Control...
  • qq_29755359
  • qq_29755359
  • 2017年05月02日 14:25
  • 312

Java中使用RandomAccessFile类实现多线程下载

多线程下载文件的注意点主要有: 1、确定每个线程下载的文件大小,用这种方法计算: 先获取整个文件的大小length,然后除以线程个数count得到每个线程下载的块大小为blockSize ...
  • yubo_725
  • yubo_725
  • 2014年07月18日 15:01
  • 2038

Android端通过Okhttp与PHP服务器进行交互并实现文件上传下载(一)

简介 由于Android给我们提供的Http请求方式之一 :HttpURLConnection,使用起来非常麻烦,所以一般我们实际开发并不会用HttpURLConnection和HttpClient,...
  • qq_32925781
  • qq_32925781
  • 2016年11月22日 13:08
  • 768

Thinkphp ajax异步下载excel文件

本代码是我自己写的达人库的代码,仅供各位参考 PHP代码部分 1,在控制器里面写下如下方法 public function printshowers(){        // 从数据库里查询出你所要...
  • u013066849
  • u013066849
  • 2016年10月13日 14:14
  • 1259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP实现文件安全下载
举报原因:
原因补充:

(最多只允许输入30个字)