如何在php中提供已压缩文件的下载链接

时间:2013-02-06 07:29:43

标签: php zip

我有用于创建某些文本文件的zip文件夹的php脚本

 <?php
  $path = "path\to\files";
  $files = array($path.'\ionic interaction.txt',$path.'\file1.txt',$path.'\file2.txt',$path.'\file3.txt',$path.'\file3.txt');
  $folder = $_POST['filename'];
  $zipname = $folder.'.zip';
  echo '<form action="download.php" method="post" name="zippass2download"><input    type="hidden" name="zipname" value="'.$zipname.'"></form>';
  $zip = new ZipArchive;
  $zip -> open($zipname, ZipArchive::CREATE);
  foreach($files as $file)
   {
     $zip -> addFile($file);
   }
  $zip -> close();
  ?>

在该脚本旁边,我创建了一个超链接来下载在第一个脚本中创建的zip文件夹。

 <a href="download.php">Download</a>

在download.php中我有以下代码

<?php
$path2zip = 'C:/wamp/www/PPInt';
$tobezipped = $_POST['zipname'];
header('Content-disposition: attachment; filename=$tobezipped');
header('Content-type: application/zip');
readfile('$path2zip/$tobezipped');
?>

没问题到底是哪里。任何人都可以为我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

$ tobezipped = $ _POST ['zipname'];

未在调用download.php时生成的get请求中设置。在生成文件后,Rember HTTP是无状态的。单击链接时,POST参数不会出现在下一个GET请求中。

您可能需要将zipname / path附加到download.php链接,如“download.php?tobezipped = zipname.zip”

答案 1 :(得分:1)

“download.php”没有获得“$ _POST ['zipname']”,因为你没有将表单发布到它而不是你提供链接,尝试给出发布表单的按钮,你有隐藏的输入文件名。 下面“Dasun”给出的代码另一件事就是检查文件和zip文件的相对URL。

答案 2 :(得分:0)

尝试以下代码

<?php 
$file_name = $_POST['zipname'];
$file_url = 'C:/wamp/www/PPInt'. $file_name;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"".$file_name."\""); 
readfile($file_url);
?>