我有一个带有表格的网站,想在每个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()
之前使用echo
、print()
或类似的东西。HTTP-sepcific 信息必须在公共输出之前。
看看 php 文档
"Remember that header() must be called before any actual output is sent [...]"
事实证明,第一个<?php
标签之前有一个空格,导致了错误。