Heim  >  Artikel  >  Backend-Entwicklung  >  php 下载功能的完美实现代码

php 下载功能的完美实现代码

WBOY
WBOYOriginal
2016-07-25 09:00:371123Durchsuche
  1. // 检查 FORM 是否全部填写完毕...
  2. if ($form_completed) {
  3. Header("Location: http://bbs.it-home.org/download/info_check.exe");
  4. exit;
  5. }
  6. ?>
复制代码

或是如下的情况: 开始下载文件 这里利用了ID方式接收要下载文件的编号,然后用“Redirect”的方式连接到实际的网址。

如果不想用户直接复制网址下载该文件,可以考虑使用PHP直接读取该实际文件然后下载的方法来实现。 代码如下:

  1. $file_name = "info_check.exe";
  2. $file_dir = "/public/www/download/";
  3. if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
  4. echo "文件找不到";
  5. exit;
  6. } else {
  7. $file = fopen($file_dir . $file_name,"r"); // 打开文件
  8. // 输入文件标签
  9. Header("Content-type: application/octet-stream");
  10. Header("Accept-Ranges: bytes");
  11. Header("Accept-Length: ".filesize($file_dir . $file_name));
  12. Header("Content-Disposition: attachment; filename=" . $file_name);
  13. // 输出文件内容
  14. echo fread($file,filesize($file_dir . $file_name));
  15. fclose($file);
  16. exit;}
  17. ?>
复制代码

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

  1. $file_name = "info_check.exe";
  2. $file_dir = "http://bbs.it-home.org/";
  3. $file = @ fopen($file_dir . $file_name,"r");
  4. if (!$file) {
  5. echo "文件找不到";
  6. } else {
  7. Header("Content-type: application/octet-stream");
  8. Header("Content-Disposition: attachment; filename=" . $file_name);
  9. while (!feof ($file)) {
  10. echo fread($file,50000);
  11. }
  12. fclose ($file);
  13. }
  14. ?>
复制代码

这样便可以用PHP直接输出文件了。以上用到了php header函数,更多内容可以参考:php 文件头部(header)信息详解

实现php文件安全下载的代码

  1. //文件安全下载

  2. public function downloads($name){
  3. $name_tmp = explode("_",$name);
  4. $type = $name_tmp[0];
  5. $file_time = explode(".",$name_tmp[3]);
  6. $file_time = $file_time[0];
  7. $file_date = date("Y/md",$file_time);
  8. $file_dir = SITE_PATH."/data/uploads/$type/$file_date/";
  9. if (!file_exists($file_dir.$name)){

  10. header("Content-type: text/html; charset=utf-8");
  11. echo "File not found!";
  12. exit;
  13. } else {
  14. $file = fopen($file_dir.$name,"r");
  15. Header("Content-type: application/octet-stream");
  16. Header("Accept-Ranges: bytes");
  17. Header("Accept-Length: ".filesize($file_dir . $name));
  18. Header("Content-Disposition: attachment; filename=".$name);
  19. echo fread($file, filesize($file_dir.$name));
  20. fclose($file);
  21. }
  22. }
  23. ?>
复制代码


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn