Maison >développement back-end >tutoriel php >Comment puis-je réaliser des téléchargements de fichiers asynchrones en 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); }
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";
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;
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!