我有一个有桌子的网站,想要在每个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
中包含的函数?
是否有一个我找不到的好(并且万无一失)的教程?
答案 0 :(得分:1)
如果您需要在标题http://php.net/manual/pt_BR/function.ob-start.php之前发送内容,请使用输出缓冲区。 无论如何,你的下载文件应该位于不同的位置,或者将下载处理部分放在文件的最顶层,然后退出
答案 1 :(得分:0)
请勿在{{1}}或echo
之前使用print()
,header()
或类似内容。特定于HTTP的信息必须在公共输出之前。
start_session()
答案 2 :(得分:0)
在发生任何其他输出之前,必须始终发送标头。这意味着它必须是当前文件中发送的第一件事(包含头信息),但它也必须是包含此文件的所有其他文件的第一件事。
<?php
// application logic here
print "X";
require 'header.php';
// application logic here
<?php
// application logic here
require 'header.php';
// application logic here
<?php
// application logic here
header( 'Content-type: application/zip' );
// application logic here
答案 3 :(得分:0)
事实证明,在第一个<?php
标记之前有一个空格,导致错误。