如何使用多个http标头?

时间:2019-03-20 17:17:01

标签: php http-headers

我有一个php页面,可下载zip文件。通常,下载后,它会使用header('location:myfiles.php');自动将用户还原到上一页( myfiles.php )。

执行页面时,它带我到myfiles.php,但不会显示下载弹出窗口,因此无法下载zip文件。当我删除行header('location:myfiles.php');时,可以按预期下载我的zip文件。

下面是我的代码的一部分。

    //Some codes
    if(file_exists($zip_name)){

       // push to download the zip
       header('Content-type: application/zip');
       header('Content-Disposition: attachment; filename="'.$zip_name.'"');
       readfile($zip_name);

       // remove zip file is exists in temp path
       unlink($zip_name);
    }        
    session_start();
    $_SESSION['correct']="Files downloaded sucessfully";
    header('location:myfiles.php');

您能帮我找到解决方法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

考虑这些标题在做什么

这2和读取文件

header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$zip_name.'"');
readfile($zip_name);

正在将文件发送到浏览器上的当前页面。

这将与上面的代码一样运行

header('location:myfiles.php');

试图告诉浏览器转到另一个页面。如果这样做,那么您发送到浏览器的文件就会消失

  

因此,基本上将它们作为一个流程一起完成是没有意义的!

     

此外,在将任何实际数据发送到浏览器之后,您将无法发送header('location:...),这当然是您在运行readfile($zip_name);时所做的