【问题标题】:How to set up a zip-download via button click? (header)如何通过按钮单击设置 zip 下载? (标题)
【发布时间】:2012-08-09 14:44:31
【问题描述】:

我有一个带有表格的网站,想在每个 tr 前面添加一个按钮。单击该按钮应弹出下载对话框(保存文件),然后按“保存”,下载文件。

我经常看到这种情况,但仍然不知道该怎么做。我已经通过表单设置了按钮:

<form method="get">
<input type="submit" value="<?php echo $paket; ?>" name="download" />
</form>

其中$paket包含没有.zip结尾的文件名。

在同一个 php 文件中,就在两个 require_once 语句下面,我这样做了:

if ( isset( $_GET['download'] ) ) {
$name = $_GET['download'];
header( 'Content-Disposition: attachment; filename = '.$name.'.zip' );
header( 'Content-type: application/zip' );
}

如果我按下按钮,我会收到以下错误:

Warning: Cannot modify header information - headers already sent by (output started at /is/lib/require.req:154) 

我知道标题信息需要放在最顶部,但是如果require_once 紧随其后几行,我应该如何使用我包含在require_once 中的函数?

有没有我找不到的不错(且万无一失)的教程?

【问题讨论】:

  • 您的输出在您的 header(...) 行之前开始。有空格或其他类型的输出。你不能那样做。
  • 您可能还想用谷歌搜索“警告:无法修改标题信息”。奇怪的是,它出现了数量惊人的相关匹配项。
  • Headers already sent by PHP 的可能重复项
  • 你试过输出缓冲吗??

标签: php http-headers


【解决方案1】:

如果您需要在标题 http://php.net/manual/pt_BR/function.ob-start.php 之前发送内容,请使用输出缓冲区。 无论如何,您的下载文件应该位于不同的位置,或者将下载处理部分放在文件的最顶部,然后退出

【讨论】:

    【解决方案2】:

    必须始终在任何其他输出发生之前发送标头。这意味着它必须是当前文件(包含标头信息)中发送的第一件事,但它也必须是包含此文件的所有其他文件的第一件事。

    不会工作

    <?php
        // application logic here
        print "X";
        require 'header.php';
        // application logic here
    

    会工作

    <?php
        // application logic here
        require 'header.php';
        // application logic here
    

    header.php

    <?php
        // application logic here
        header( 'Content-type: application/zip' );
        // application logic here
    

    【讨论】:

      【解决方案3】:

      请勿在header()start_session() 之前使用echoprint() 或类似名称。 HTTP 特定信息必须在 common-output 之前。

      看看php-documentation

      "Remember that header() must be called before any actual output is sent [...]"
      

      【讨论】:

      • 您需要更好地解释这个答案才能使其有用。
      • 只是添加了几行,更好吗? :)
      • 更好,是的。最好,没有。 -1 被移除。
      【解决方案4】:

      原来在第一个&lt;?php标签之前有一个空格,导致错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多