如何通过按钮点击设置zip下载? (标题)

时间:2012-08-09 14:44:31

标签: php http-headers

我有一个有桌子的网站,想要在每个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中包含的函数?

是否有一个我找不到的好(并且万无一失)的教程?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

请勿在{{1​​}}或echo之前使用print()header()或类似内容。特定于HTTP的信息必须在公共输出之前。

只需查看php-documentation

即可
start_session()

答案 2 :(得分:0)

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

无效

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

将ork

<?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 :(得分:0)

事实证明,在第一个<?php标记之前有一个空格,导致错误。