Dans PHP, la fonction FPASSTHRU est un outil de streaming de fichiers très pratique, qui est particulièrement adapté à la sortie directe du contenu de fichiers au client, telles que des images, des vidéos, du téléchargement de fichiers, etc. Son plus grand avantage est qu'il peut transférer efficacement le contenu des fichiers vers le navigateur sans lire l'ensemble du fichier en mémoire, ainsi en révision des ressources et en évitant les problèmes de dépassement de mémoire.
Cet article introduira en détail comment utiliser la fonction fpassthru pour implémenter le streaming de fichiers et combiner un exemple complet de code pour vous aider à démarrer rapidement.
FPASSTHRU est une fonction dans l'opération de fichier PHP, et la fonction consiste à sortir de la position actuelle du pointeur de fichier jusqu'à la fin du fichier. Il est souvent utilisé en conjonction avec FOPEN . Après avoir ouvert le fichier, le contenu du fichier est directement sorti vers le navigateur.
Prototype de fonction:
int fpassthru ( resource $handle )
$ Handle est une ressource de pointeur de fichiers renvoyée par fopen () .
La valeur de retour est le nombre de sorties d'octets.
Interface de téléchargement de fichiers
Sortie de l'image ou du flux vidéo
Tout scénario où les fichiers doivent être envoyés au client intact
Ouvrez le fichier <br> Utilisez fopen () pour ouvrir le fichier en mode binaire pour vous assurer que le fichier transféré n'est pas affecté par le codage des caractères.
Envoyer l'en-tête HTTP correct <br> Envoyez le type de contenu correspondant, le contenu-longueur et la disposition du contenu en fonction du type de fichier (si les fichiers téléchargés).
Appelez FPassthru pour sortir du flux de fichiers <br> Exportez le contenu du fichier directement vers le client.
Fermer les ressources de fichiers <br> Libérez les ressources pour éviter la fuite des ressources.
<?php
// Chemin de fichier
$filePath = '/path/to/your/file.zip';
// Déterminez si le fichier existe
if (!file_exists($filePath)) {
header("HTTP/1.1 404 Not Found");
exit("File not found.");
}
// Ouvrir le fichier
$fp = fopen($filePath, 'rb');
if (!$fp) {
header("HTTP/1.1 500 Internal Server Error");
exit("Failed to open file.");
}
// Obtenir la taille du fichier
$fileSize = filesize($filePath);
// installation HTTP tête,Dites le type et la taille du fichier du navigateur
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Content-Length: ' . $fileSize);
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Expires: 0');
// utiliser fpassthru Contenu du fichier de sortie
fpassthru($fp);
// Fermer les ressources de fichiers
fclose($fp);
exit;
?>
fopen ($ filepath, 'rb') : ouvrez le fichier en mode en lecture seule.
L'ensemble d'en-tête HTTP garantit que le navigateur reconnaît le type de fichier et la taille, et la disposition du contenu spécifie le nom par défaut du fichier téléchargé.
FPASSTHRU ($ FP) sortira toutes les données de la position actuelle du pointeur de fichier vers la fin du fichier directement.
Fermez la poignée du fichier et sortez pour vous assurer qu'aucun contenu redondant n'est sorti.
Si le fichier est grand, FPassthru est un moyen efficace de le transférer car il ne lira pas tous les fichiers en mémoire.
Assurez-vous d'envoyer l'en-tête HTTP approprié avant le transfert pour vous assurer que le navigateur gère correctement le fichier.
Si le chemin du fichier provient de l'entrée de l'utilisateur, assurez-vous d'effectuer une vérification de sécurité pour éviter les risques de sécurité tels que la traversée de chemin.
Pour les exigences de téléchargement qui prennent en charge la transmission continue de point d'arrêt, l'en-tête HTTP_RANGE supplémentaire est requis, et cet article ne s'expliquera pas en détail.
Grâce aux étapes ci-dessus, vous pouvez facilement utiliser la fonction FPASSTHRU de PHP pour obtenir un streaming de fichiers efficace. Il convient à toutes sortes de scénarios de téléchargement de fichiers et de streaming de sortie multimédia, avec du code concis et d'excellentes performances.
Si vous devez créer une interface de téléchargement de fichiers ou un service de streaming multimédia, vous pourriez aussi bien essayer FPassthru , ce qui rendra votre code plus concis et efficace.