-2

テーブルのあるサイトがあり、それぞれの前にボタンを追加したいと考えていますtr。ボタンをクリックすると、ダウンロード ダイアログ (ファイルの保存) がポップアップ表示されます。[保存] を押した後、ファイルをダウンロードします。

私はこれをよく見かけますが、まだそれを行う方法がわかりません。フォームを介してボタンを設定しました:

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

whereには、末尾$paketのないファイル名が含まれます。.zip

同じ php ファイルの 2 つの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

4 に答える 4

1

ヘッダーhttp://php.net/manual/pt_BR/function.ob-start.phpの前にコンテンツを送信する必要がある場合は、出力バッファーを使用します。とにかく、ダウンロードファイルは別の場所に置くか、ダウンロード処理部分をファイルの一番上に置き、その後終了する必要があります

于 2012-08-09T14:47:26.737 に答える
0

<?php最初のタグの前に空白があり、それがエラーの原因であることが判明しました。

于 2012-12-07T14:48:51.577 に答える
0

echoや の前に、またはprint()類似のものを使用しないでください。HTTP 固有の情報は、共通出力の前にある必要があります。header()start_session()

php-documentationを見てください

"Remember that header() must be called before any actual output is sent [...]"
于 2012-08-09T14:50:21.967 に答える
0

ヘッダーは、他の出力が行われる前に常に送信されている必要があります。つまり、現在のファイル (ヘッダー情報を含む) で最初に送信する必要がありますが、このファイルを含む他のすべてのファイルについても最初に送信する必要があります。

うまくいかない

<?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
于 2012-08-09T14:50:31.540 に答える