ホームページ >バックエンド開発 >PHPチュートリアル >PHP で非同期ファイルのダウンロードを実現するにはどうすればよいですか?

PHP で非同期ファイルのダウンロードを実現するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-16 18:18:11967ブラウズ

How Can I Achieve Asynchronous File Downloads in PHP?

PHP を使用したファイルの非同期ダウンロード: 総合ガイド

対話型 Web アプリケーションを構築する場合、ファイルを非同期的にダウンロードする必要が生じることがよくあります。この方法を使用すると、ページ全体を更新せずにサーバーからファイルを取得できるため、ユーザー エクスペリエンスが向上します。この記事では、PHP を利用して非同期ファイルのダウンロードを実現することに焦点を当てています。

ボタンが AJAX 関数をトリガーする一般的なシナリオについて詳しく説明します。 AJAX 関数はデータを PHP スクリプトに送信し、PHP スクリプトはユーザーの入力に基づいて CSV ファイルを作成します。課題は、この新しく作成された CSV ファイルをダウンロードするようブラウザに求めることです。

ファイル ダウンロード開始のための AJAX 関数

提供されたコード スニペットで説明されているように、ボタン クリックcsv() AJAX 関数を開始します。

function csv(){
    $ajaxRequest = ajax();//ajax() initializes XML HTTP Requests
    $postdata = "data=" + document.getElementById("id").value;
    $ajaxRequest.onreadystatechange = function(){
        $ajaxDisplay = document.getElementById('ajaxDiv');
        if($ajaxRequest.readyState == 4 && $ajaxRequest.status==200){
            $ajaxDisplay.innerHTML = $ajaxRequest.responseText;
        }
    }
    $ajaxRequest.open("POST","csv.php",false);
    $ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    $ajaxRequest.send($postdata);
}

ファイルの PHP コード作成とダウンロードのプロンプト

csv.php スクリプトは、ファイルの作成とダウンロードのプロンプトを処理します。ただし、提供されたスクリプトはこの目的には適していません。

$fileName = 'file.csv';
$downloadFileName = 'newfile.csv';
if (file_exists($fileName)) {
    header('Content-Description: File Transfer');
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename='.$downloadFileName);
    ob_clean();
    flush();
    readfile($fileName);
    exit;
}
echo "done";

このスクリプトを csv.php の最後に含めると、file.csv の内容がページ内 (ajaxDiv 要素内) に表示されます。

解決策: 新しいウィンドウを使用して、ダウンロード

ダウンロードを強制するには、AJAX に依存することはできません。代わりに、ダウンロード リンクをアドレスとして新しいウィンドウを開くか、document.location = ....

window.open('download.php?file=' . $fileName, '_blank');

// or

document.location = 'download.php?file=' . $fileName;

結論

非同期ファイルの場合PHP でダウンロードする場合は、AJAX の使用を避けてください。ダウンロード リンクを含む新しいウィンドウを開くか、ドキュメントの場所をリダイレクトしてダウンロードを開始することを検討してください。

以上がPHP で非同期ファイルのダウンロードを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。