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 サイトの他の関連記事を参照してください。