Maison >développement back-end >tutoriel php >Comment puis-je télécharger des fichiers volumineux à partir d'URL en PHP sans épuisement de la mémoire ?

Comment puis-je télécharger des fichiers volumineux à partir d'URL en PHP sans épuisement de la mémoire ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-16 01:38:13716parcourir

How Can I Download Large Files from URLs in PHP without Memory Exhaustion?

Téléchargement de fichiers volumineux à partir d'URL sans problèmes de mémoire

Les développeurs Web sont généralement confrontés au défi de télécharger des fichiers volumineux à partir d'URL distantes. Bien que l'approche simple utilisant file_get_contents() et file_put_contents() puisse suffire pour les fichiers plus petits, elle ne suffit pas pour ceux qui dépassent les limites de mémoire. Ce problème a soulevé la question : comment télécharger des fichiers volumineux de manière incrémentielle sans épuiser les ressources mémoire.

Heureusement, PHP propose une solution élégante qui répond à ce problème. Depuis la version 5.1.0, file_put_contents() prend en charge l'écriture de données en morceaux en passant un handle de flux comme deuxième argument.

Voici le code modifié qui exploite cette fonctionnalité :

file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));

Ceci le code fonctionne comme suit :

  • Il ouvre l'URL distante en tant que descripteur de flux en utilisant fopen().
  • Il fournit ensuite ce handle à file_put_contents() comme paramètre de données.
  • Au fur et à mesure que le fichier distant est téléchargé, il est progressivement écrit dans le fichier local, Tmpfile.zip, sans surcharger la mémoire.

Le manuel PHP explique que passer un handle de flux à file_put_contents() déclenche la copie du tampon restant du diffuser vers le fichier cible. Ce mécanisme reflète efficacement la fonctionnalité de stream_copy_to_stream().

En employant cette technique, les développeurs peuvent télécharger sans effort des fichiers volumineux sans rencontrer de contraintes de mémoire, garantissant ainsi un transfert de données transparent, même pour les tailles de fichiers les plus volumineuses.

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!

Déclaration:
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