Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich asynchrone Dateidownloads in PHP erreichen?

Wie kann ich asynchrone Dateidownloads in PHP erreichen?

DDD
Freigeben: 2024-12-16 18:18:11
Original
966 Leute haben es durchsucht

How Can I Achieve Asynchronous File Downloads in PHP?

Asynchrones Herunterladen von Dateien mit PHP: Eine umfassende Anleitung

Beim Erstellen interaktiver Webanwendungen besteht häufig die Notwendigkeit, Dateien asynchron herunterzuladen. Mit dieser Methode können Sie Dateien von einem Server abrufen, ohne die gesamte Seite zu aktualisieren, was die Benutzererfahrung verbessert. Dieser Artikel konzentriert sich auf die Verwendung von PHP zum Erreichen asynchroner Dateidownloads.

Wir werden uns mit einem häufigen Szenario befassen, bei dem eine Schaltfläche eine AJAX-Funktion auslöst. Die AJAX-Funktion sendet Daten an ein PHP-Skript, das wiederum eine CSV-Datei basierend auf den Eingaben des Benutzers erstellt. Die Herausforderung besteht darin, den Browser zum Herunterladen dieser neu erstellten CSV-Datei zu veranlassen.

AJAX-Funktion für die Initiierung des Dateidownloads

Wie im bereitgestellten Codeausschnitt beschrieben, klicken Sie auf die Schaltfläche initiiert die AJAX-Funktion csv().

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);
}
Nach dem Login kopieren

PHP-Code für die Dateierstellung und den Download Eingabeaufforderung

Das csv.php-Skript übernimmt die Dateierstellung und die Download-Eingabeaufforderung. Das bereitgestellte Skript ist jedoch nicht für unseren Zweck geeignet.

$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";
Nach dem Login kopieren

Wenn dieses Skript am Ende von csv.php eingefügt wird, wird der Inhalt von file.csv innerhalb der Seite angezeigt (im ajaxDiv-Element). ) anstatt einen Download zu starten.

Lösung: Ein neues Fenster für den Download verwenden

Zum Erzwingen Bei einem Download können wir uns nicht auf AJAX verlassen. Stattdessen können wir ein neues Fenster mit dem Download-Link als Adresse öffnen oder document.location = ....

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

// or

document.location = 'download.php?file=' . $fileName;
Nach dem Login kopieren

Fazit

Für asynchrone Dateien verwenden Downloads in PHP, vermeiden Sie die Verwendung von AJAX. Erwägen Sie, ein neues Fenster mit dem Download-Link zu öffnen oder den Speicherort des Dokuments umzuleiten, um den Download zu starten.

Das obige ist der detaillierte Inhalt vonWie kann ich asynchrone Dateidownloads in PHP erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage