Maison >développement back-end >tutoriel php >Comment diffuser des fichiers Zip volumineux sur la pile LAMP pour des téléchargements plus rapides ?
Création de fichiers Zip à la volée pour les fichiers volumineux sur une pile LAMP
Problème :
Lors de la création de fichiers zip de plusieurs fichiers volumineux à télécharger par l'utilisateur, les méthodes conventionnelles entraînent des problèmes de performances importants au cours de la phase initiale en raison d'une utilisation intensive du processeur et du disque.
Solution utilisant le streaming :
Pour résoudre ce problème, nous pouvons exploiter les capacités de streaming de zip en utilisant popen() ou proc_open() pour exécuter le pipeline de commandes zip et récupérer la sortie standard sous forme de flux PHP. En combinant cela avec un processus de serveur Web, nous pouvons diffuser le fichier zip à l'utilisateur lors de sa création à la volée.
Implémentation à l'aide de popen() :
<?php // Set necessary headers header('Content-Type: application/zip'); header('Content-disposition: attachment; filename="file.zip"'); // Execute zip command and retrieve stdout as a stream $fp = popen('zip -r - file1 file2 file3', 'r'); // Read and echo data in chunks $bufsize = 65535; $buff = ''; while (!feof($fp)) { $buff = fread($fp, $bufsize); echo $buff; } pclose($fp); ?>
Conseils d'optimisation :
Utilisez les en-têtes appropriés liés au contenu :
Malheureusement, il n'est pas simple de définir un en-tête pour indiquer la longueur du contenu en streaming ou inconnue dans ce contexte.
Remarque sur flush() :
Il est important de noter que l'appel de flush() dans la boucle de lecture/écho peut entraîner des problèmes avec des fichiers volumineux et des réseaux lents en raison du dépassement du tampon de sortie interne d'Apache. Par conséquent, il est préférable d’omettre les appels flush() dans le code.
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!