現在の位置: ホーム> 最新記事一覧> FPASSTHRU関数を介して圧縮ファイルをブラウザに送信するための実用的な方法と予防策は何ですか?

FPASSTHRU関数を介して圧縮ファイルをブラウザに送信するための実用的な方法と予防策は何ですか?

gitbox 2025-09-12

<?php //記事が始まります エコー

FPASSTHRU関数を介して圧縮ファイルをブラウザに送信するための実用的な方法と注意事項は何ですか?

エコー 「PHP開発では、ユーザーをダウンロードできるように、ユーザーがブラウザに直接サーバー(ZIP、GZなど)に圧縮ファイルを送信する必要があることがよくあります。機能は効率的な選択肢です

。ファイル全体をメモリにロードすることなく、ファイルポインターからファイルコンテンツを直接読み取ることができます。

エコー

1。fpassthruの基本的な使用

エコー

「fpassthruの基本的な構文は次のとおりです。

;エコー
int fpassthru(resource \ $ handle)
"
;
エコー

ファイルの最後まで\ $ハンドルによって指されたファイルを読み取り、データをブラウザに直接出力し、バイト出力の数を返します。

エコー

2。圧縮されたファイルをブラウザに送信する手順

エコー "
    "
;エコー
  • 正しいHTTPヘッダーを設定します。これがファイルのダウンロード要求であることをブラウザが知っていることを確認してください。
  • エコー
  • 開くファイル: FOPENを使用して、送信する必要がある圧縮ファイルを開きます。
  • ;エコー
  • fpassthruを使用してファイルコンテンツを出力します。ファイルコンテンツをブラウザに直接転送します。
  • ;エコー
  • ファイルポインターを閉じます:リソースを解放します。
  • ;エコー "" ;エコー "

    サンプルコード:

    "
    ;エコー
    \ $ file = &#39;embles.zip&#39;;
    if(file_exists(\ $ file)){
        ヘッダー( &#39;コンテンツデスクリプリ:ファイル転送&#39;);
        ヘッダー( &#39;Content-Type:Application/Zip&#39;);
        Header( &#39;Content-Disposition:Attachment; Filename = \ "&#39;。Basename(\ $ file)。 &#39;\"&#39;);
        ヘッダー( &#39;コンテンツトランスファーエンコード:バイナリ&#39;);
        ヘッダー( &#39;content-length:&#39;。filesize(\ $ file));
    
        \ $ fp = fopen(\ $ file、 &#39;rb&#39;);
        if(\ $ fp){
            fpassthru(\ $ fp);
            fclose(\ $ fp);
            出口;
        }
    }
    
    "
    ;
    エコー

    3つの実用的な方法

    ;エコー "
      "
    ;エコー
  • ReadFileまたはFPASSTHRUを使用して、大きなファイルを一度にメモリにロードしないようにします。
  • エコー
  • OB_CLEAN()Flush()と組み合わせて、出力バッファーをクリーニングして、正しいファイル送信を確保します。
  • エコー
  • ダウンロードエクスペリエンスを改善するために、コンテンツレングスを通じてブラウザファイルのサイズに事前に通知します。
  • エコー
  • 大きなファイルをチャンクで読み取り、出力でき、 set_time_limit(0)を使用してタイムアウトを防ぐことができます。
  • エコー "" ;エコー

    IV。注意すべきこと

    ;エコー "
      "
    ;エコー
  • ファイルを送信する前に、スペースやHTMLを含む出力がないことを確認してください。そうしないと、HTTPヘッダーが壊れます。
  • エコー
  • ZIPなどのMIMEタイプを正しく設定します。アプリケーション/ZIP 、GZはApplication/GZIPを使用します。
  • エコー
  • サーバーの権限は、PHPがターゲットファイルを読み取ることを許可する必要があります。
  • ;エコー
  • 大きなファイルをダウンロードするときは、帯域幅の制限とタイムアウト設定を検討してください。
  • エコー "" ;エコー

    5、要約

    ;エコー

    FPASTTHRUを使用すると、サーバー上の圧縮ファイルをブラウザに効率的に送信して、過度のメモリ使用量を回避できます。使用中に、HTTPヘッダー設定、出力バッファー処理、ファイル許可などの問題に注意を払う必要があります。これらのスキルの習得により、ファイルのダウンロード機能をより安定して効率的にすることができます。

    //記事の終わり ?>