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


How to set up a zip-download via button click? (header)

我有一个带有表格的网站,想在每个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中的函数?

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

如果需要在

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

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

行不通

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

威尔·

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

标头.php

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

不要在header()start_session()之前使用echoprint()或类似的东西。HTTP-sepcific 信息必须在公共输出之前。

看看 php 文档

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

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