程序下载问题

来源:2-11 文件下载函数封装

呼___吸

2017-10-13 19:47:09

在教程上老师用已封装好的函数获取一个文件名2.zip,然后就可以下载这个zip文件。程序根据文件名且不知道路劲就可以下载,为什么???

我点击“下载1.zip”可以运行出来,点击“下载2.zip”运行不出来???

我的1.zip 2.zip 文件在同一路劲下,下面是我的代码

downLoad.html

<!DOCTYPE html>

<html>

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <meta http-equiv="X-UA-Compatible" content="ie=edge">

  <title>测试下载</title>

</head>

<body>

  <a href="http://127.0.0.1:8080/web/hanshuku/hanshuku.zip">下载1.zip</a>

  <br>

  <a href="downLoad.php?filename=2.zip">下载2.zip</a>

</body>

</html>


downLoad.php

<?php

require_once('file_fun.php');

$filename=$_GET['filename'];

down_file1($filename);


file_fun.php

function down_file1(string $filename, array $allowDownext=array('jpg','jpeg','png','gif','txt','html','Xmind','rar','zip')){

 //检测文件是否可读,是否是文件

  if(!is_file($filename)||!is_readable($filename)){

    return false;

  }

  //检测文件类型是否可以下载,获取文件扩展名来检测

   $ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));

   if(!in_array($ext,$allowDownext)){

     return false;

   }

   //通过header()发送头部信息

   //告诉浏览器输出的是字节流

   header('Content-Type:application/octet-stream');


   //告诉浏览器返回的文件大小按字节进行计算

   header('Accept-Ranges:bytes');


   //告诉浏览器返回的文件大小

   header('Accept-Length:'.filesize($filename));


   //告诉浏览器作为附件处理,告诉浏览器 最终下载完的文件名称

   header('Content-Disposition:attachment;filename'.basename($filename));

//规定每次读取文件的字节数为1024字节,直接读出数据

   $read_buffer=1024;

   $sum_buff=0;

   $handle=fopen($filename,'rb');

   while(!feof($handle)&&$sum_buff<filesize($filename)){

     echo fread($handle,$read_buffer);

     $sum_buff+=$read_buffer;

   }

   fclose($filename);


   exit;


}



写回答

1回答

imooc_澈

2017-10-15

您好,老师的例子中只写了文件名称2.zip就成功下载,是因为2.zip与download.php在同一路径下,因此2.zip的路径就省略了,就老师封装的这个函数而言,传进函数的参数$filename不只是单独的一个文件名,而是文件路径,在您的代码中,如果2.zip跟1.zip是在同一路径下,那么在您的download.php文件中的第二行代码应该写成:$filename="http://127.0.0.1:8080/web/hanshuku/".$_GET['filename'];

调用down_file1这个函数时将修改过后的$filename传进去。您也可以找到2.zip相对你的download.php页面的相对路径,与获取的文件名2.zip拼接到一起试一试。

如果解决了您的问题,请采纳,祝学习愉快~

0

0 学习 · 2569 问题

查看课程