現在の位置: ホーム> 最新記事一覧> ダウンロードボタンを実装:フロントエンドはリクエストをトリガーし、バックエンドはheader()を使用してファイルをプッシュします

ダウンロードボタンを実装:フロントエンドはリクエストをトリガーし、バックエンドはheader()を使用してファイルをプッシュします

M66 2025-06-05

ファイルのダウンロードは、Webアプリケーションの一般的な要件の1つです。 PHPのHeader()関数を介して、ファイルをブラウザにプッシュし、ユーザーのファイルのダウンロード操作をトリガーできます。この記事では、PHPのHeader()関数を介してファイルのダウンロード関数を実装する方法を詳細に紹介し、フロントエンドのトリガーリクエストとバックエンドがHeader()関数を使用してファイルをブラウザにプッシュする方法を説明します。

フロントエンドでファイルのダウンロード要求をトリガーする方法は?

フロントエンドでは、HTMLまたはJavaScriptを使用して、ファイルのダウンロードリクエストをトリガーできます。最も簡単な方法は、リンクをクリックしてダウンロードをトリガーすることです。通常、 Aタグを使用してリンクを定義し、 HREFを使用してファイルのURLを指定します。

 <a href="http://m66.net/download.php?file=example.txt" download>クリックしてファイルをダウンロードします</a>

この例では、ユーザーがリンクをクリックした後、ブラウザはdownload.phpファイルを要求し、get requestを介してファイルパラメーター( file = example.txtなど)をバックエンドPHPスクリプトに渡します。

さらに、次のようなJavaScriptからファイルのダウンロードを動的にトリガーすることもできます。

 function downloadFile() {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", "http://m66.net/download.php?file=example.txt", true);
    xhr.responseType = "blob"; // 返されたデータがバイナリファイルであることを示します
    xhr.onload = function() {
        const blob = xhr.response;
        const link = document.createElement('a');
        link.href = URL.createObjectURL(blob);
        link.download = 'example.txt'; // ダウンロードしたファイル名を設定します
        link.click(); // [トリガー]クリック,ファイルをダウンロードします
    };
    xhr.send();
}

このJavaScriptはAjaxを介してファイルを要求し、Blobオブジェクトを使用してファイルのダウンロードリンクを作成し、ダウンロードを自動的にトリガーします。

バックエンドでheader()を使用してファイルをプッシュする方法は?

PHPでは、 Header()関数を使用して、生のHTTPヘッダー情報を送信します。 Header()関数を介して、ブラウザにファイルをダウンロードするように指示できます。特定の操作は次のとおりです。

  1. まず、ファイルの存在を確認していることを確認してください。

  2. 適切なコンテンツタイプとコンテンツ拡張ヘッダーを設定して、ファイルの処理方法をブラウザに伝えます。

  3. readfile()またはその他のメソッドを使用して、ファイルコンテンツをブラウザに出力します。

 <?php
// download.php

// ファイル名パラメーターを取得します
$file = isset($_GET['file']) ? $_GET['file'] : '';
$filePath = '/path/to/files/' . $file; // ファイルへの絶対パスを設定します

// ファイルが存在するかどうかを確認してください
if (file_exists($filePath)) {
    // 応答ヘッダーを設定します,告知浏览器ファイルをダウンロードします
    header('Content-Type: application/octet-stream');  // すべてのファイルタイプに適用できます
    header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');  // ファイル名をダウンロードして指定します
    header('Content-Length: ' . filesize($filePath)); // ファイルサイズ
    header('Cache-Control: no-cache, no-store, must-revalidate'); // キャッシュを無効にします
    header('Pragma: no-cache');
    header('Expires: 0');

    // 出力ファイルコンテンツ
    readfile($filePath);
    exit;
} else {
    echo 'ファイルが存在しないか、パスが間違っています!';
}
?>

このPHPの例では、最初にURL(たとえば.txt )にファイルパラメーターを渡してから、ファイルパスでファイルを検索します。ファイルが存在する場合、 header()を介してファイルのダウンロードタイプとその他の情報を設定し、 readfile()を使用してファイルの内容を出力し、最後にファイルのダウンロードを実現します。

コード解析:

  • Header( 'Content-Type:Application/Octet-Stream') :ファイルタイプをバイナリストリームに設定します。すべてのタイプのファイルについて、アプリケーション/オクテットストリームを一般的なMIMEタイプとして使用します。

  • Header( 'Content-Disposition:Attachment; Filename = "Filename"') :応答を受信するときに添付ファイルとしてブラウザを添付ファイルにダウンロードし、ファイル名をファイルに割り当てます。ファイル名はBasename()を介して取得できます。

  • Header( 'Content-Length:'。Filesize($ filepath)) :ファイルサイズを設定します。これは大規模なファイルにとって特に重要であり、ブラウザはこの情報に基づいてダウンロードの進捗を見積もることができます。

  • readfile($ filepath) :この関数はファイルを読み取り、ブラウザに直接出力します。

  • 出口; :ファイルコンテンツを出力した後、 exitを呼び出します。不必要な出力や応答を避けるために、スクリプトの実行を終了します。

要約します

PHPのHeader()関数を使用し、適切なHTTPヘッダー設定と組み合わせることにより、ファイルのダウンロード機能を実装できます。フロントエンドでは、ユーザーはリンクをクリックするか、AJAXリクエストをトリガーしてファイルを要求します。バックエンドでは、PHPはHeader()関数を介して正しい応答ヘッダーを設定し、ダウンロードするためにファイルコンテンツをブラウザにプッシュします。このようにして、ファイルのダウンロード機能をWebアプリケーションに簡単に追加できます。