首頁 >後端開發 >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 腳本,該腳本又會根據使用者的輸入建立 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn