PHP实现的文件直接输出下载_PHP

WBOY
Release: 2016-06-01 12:31:13
Original
1746 people have browsed it

  你一定会笑我“下载文件”如此简单都值得说?当然并不是想你想象的那么简单。例如你希望客户要填完一份表格,才可以下载某一文件,你第一个想法一定是用 “Redirect”的方法,先检查表格是否已经填写完毕和完整,然后就将网址指到该文件,这样客户才能下载,例如笔者编写的以下代码:

  <?

  // 检查 FORM 是否全部填写完毕...

  if ($form_completed) {

  Header("Location: http://www.webjx.com/download/info_check.exe");

  exit;

  }

  ?>

  或者是以下的情况:

  “ <a href="http://www.yourwebl.com/users/download.php?id=124524">开始下载文件</a> ”

  这里利用了ID方式接收要下载文件的编号,然后用“Redirect”的方式连接到实际的网址。   

  如果你想做一个关于“网上购物”的电子商务网站,考虑安全问题,你不想用户直接复制网址下载该文件,笔者建议你使用PHP直接读取该实际文件然后下载的方法去做。程序如下:

  <?

  $file_name = "info_check.exe";

  $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 = "info_check.exe";

  $file_dir = "http://www.webjx.com/";

  $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直接输出文件了。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template