Maison > développement back-end > tutoriel php > Comment puis-je réaliser des téléchargements de fichiers asynchrones en PHP ?

Comment puis-je réaliser des téléchargements de fichiers asynchrones en PHP ?

DDD
Libérer: 2024-12-16 18:18:11
original
964 Les gens l'ont consulté

How Can I Achieve Asynchronous File Downloads in PHP?

Téléchargement de fichiers de manière asynchrone avec PHP : un guide complet

Lors de la construction d'applications Web interactives, il est souvent nécessaire de télécharger des fichiers de manière asynchrone. Cette méthode vous permet de récupérer des fichiers sur un serveur sans actualiser la page entière, améliorant ainsi l'expérience utilisateur. Cet article se concentre sur l'utilisation de PHP pour réaliser des téléchargements de fichiers asynchrones.

Nous examinerons un scénario courant dans lequel un bouton déclenche une fonction AJAX. La fonction AJAX envoie des données à un script PHP, qui crée à son tour un fichier CSV basé sur la saisie de l'utilisateur. Le défi consiste à inviter le navigateur à télécharger ce fichier CSV nouvellement créé.

Fonction AJAX pour l'initiation du téléchargement de fichiers

Comme indiqué dans l'extrait de code fourni, le bouton clique sur lance la fonction AJAX 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);
}
Copier après la connexion

Code PHP pour la création et le téléchargement de fichiers Invite

Le script csv.php gère la création de fichiers et l'invite de téléchargement. Cependant, le script fourni ne convient pas à notre objectif.

$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";
Copier après la connexion

Lorsque ce script est inclus à la fin de csv.php, le contenu de file.csv est affiché au sein de la page (dans l'élément ajaxDiv ) plutôt que de lancer un téléchargement.

Solution : Utiliser une nouvelle fenêtre de téléchargement

Pour forcer un téléchargement, nous ne pouvons pas compter sur AJAX. Au lieu de cela, nous pouvons ouvrir une nouvelle fenêtre avec le lien de téléchargement comme adresse ou utiliser document.location = ....

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

// or

document.location = 'download.php?file=' . $fileName;
Copier après la connexion

Conclusion

Pour les fichiers asynchrones téléchargements en PHP, évitez d'utiliser AJAX. Pensez à ouvrir une nouvelle fenêtre avec le lien de téléchargement ou à rediriger l'emplacement du document pour lancer le téléchargement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal