Maison >développement back-end >tutoriel php >Comment puis-je diffuser efficacement des fichiers volumineux en PHP pour éviter l'épuisement de la mémoire ?
Diffusion de fichiers volumineux avec PHP
Dans les scénarios où vous souhaitez offrir en toute sécurité aux utilisateurs le téléchargement unique d'un fichier volumineux sans consommer trop mémoire, la question se pose : comment diffuser le fichier efficacement ?
L'approche conventionnelle consistant à utiliser file_get_contents() pour récupérer l'intégralité du fichier le contenu s'avère simultanément peu pratique en raison de limitations potentielles de la mémoire. Pour résoudre ce problème, envisagez d'utiliser une méthode de streaming qui fournit les données en morceaux gérables.
Une solution, suggérée dans une source en ligne, consiste à utiliser la fonction readfile_chunked(). Cette fonction vous permet de spécifier une taille de morceau et de lire et d'afficher de manière itérative le contenu du fichier, évitant ainsi la surcharge de mémoire.
L'exemple de code fourni démontre la mise en œuvre de cette approche :
// Define the chunk size in bytes define('CHUNK_SIZE', 1024*1024); // Function to read a file and display its content chunk by chunk function readfile_chunked($filename, $retbytes = TRUE) { $buffer = ''; $cnt = 0; $handle = fopen($filename, 'rb'); if ($handle === false) { return false; } while (!feof($handle)) { $buffer = fread($handle, CHUNK_SIZE); echo $buffer; ob_flush(); flush(); if ($retbytes) { $cnt += strlen($buffer); } } $status = fclose($handle); if ($retbytes & $status) { return $cnt; // Return the number of bytes delivered. } return $status; } // Restrict access to logged-in users if ($logged_in) { $filename = 'path/to/your/file'; $mimetype = 'mime/type'; header('Content-Type: '.$mimetype ); readfile_chunked($filename); } else { echo 'Access denied.'; }
Cette approche diffuse le fichier en morceaux gérables, évitant les contraintes de mémoire et fournissant le fichier aux utilisateurs de manière efficace.
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!