


Conseils pour résoudre l'échec de PHP lors de l'envoi de fichiers volumineux
Conseils pour résoudre l'échec de PHP lors de l'envoi de fichiers volumineux
Dans le développement Web, nous rencontrons souvent des situations dans lesquelles nous devons gérer des téléchargements de fichiers volumineux. Cependant, lors de l'envoi de fichiers volumineux à l'aide de PHP, vous pouvez rencontrer certains problèmes, tels que l'épuisement de la mémoire, l'interruption du transfert de fichiers, etc. Cet article partagera quelques conseils pour résoudre l'échec de PHP lors de l'envoi de fichiers volumineux et fournira des exemples de code spécifiques.
1. Utilisez la méthode fragmentée pour transférer des fichiers
PHP lit l'intégralité du fichier en mémoire par défaut, puis l'envoie au client. Pour les fichiers volumineux, cela peut entraîner un épuisement de la mémoire. Par conséquent, il est recommandé d'utiliser la méthode fragmentée pour transférer des fichiers, c'est-à-dire lire le fichier bloc par bloc et l'envoyer au client.
Ce qui suit est un exemple de code PHP qui utilise la méthode chunked pour transférer des fichiers :
<?php $file = 'path/to/your/large/file'; header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($file) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); $handle = fopen($file, 'rb'); while (!feof($handle)) { echo fread($handle, 8192); ob_flush(); flush(); } fclose($handle); exit;
Dans le code ci-dessus, nous ouvrons d'abord le gros fichier qui doit être envoyé, puis utilisons fread
pour lire 8 192 octets à chaque fois (peut être ajusté en fonction de la situation réelle), et envoyer le contenu au client immédiatement via ob_flush
et flush
au lieu d'attendre que le fichier entier soit lu . fread
每次读取8192字节(可以根据实际情况调整),并通过ob_flush
和flush
将内容立即发送给客户端,而不是等到整个文件都读取完毕。
二、增加超时时间和内存限制
如果PHP脚本在传输大文件时遇到超时或内存耗尽的问题,可以通过增加超时时间和内存限制来解决。可以在PHP脚本开始处设置如下参数:
ini_set('max_execution_time', 0); ini_set('memory_limit', '512M');
其中,max_execution_time
表示最大执行时间,设置为0表示不限制;memory_limit
表示内存限制,根据实际情况设定一个合适的数值。
三、使用流式传输
另一种解决大文件发送失败的方法是使用流式传输,即使用readfile
函数或者fopen
结合fpassthru
函数来实现文件流传输,如下所示:
<?php $file = 'path/to/your/large/file'; header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($file) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file); exit;
以上代码通过readfile
rrreee
Parmi eux,max_execution_time
représente le temps d'exécution maximum, et le définir sur 0 signifie aucune limite memory_limit
; > représente la limite de mémoire, en fonction de la situation réelle. Définissez une valeur appropriée. 🎜🎜3. Utiliser la transmission en streaming🎜🎜Une autre façon de résoudre le problème de l'échec de l'envoi de fichiers volumineux est d'utiliser la transmission en streaming, c'est-à-dire d'utiliser la fonction readfile
ou fopen
. combiné avec La fonction fpassthru
est utilisée pour implémenter le streaming de fichiers, comme indiqué ci-dessous : 🎜rrreee🎜Le code ci-dessus génère directement le contenu du fichier via la fonction readfile
, évitant ainsi d'avoir à lire l'intégralité du fichier en mémoire en une seule fois. 🎜🎜Résumé🎜🎜Grâce aux conseils et aux exemples de code ci-dessus, nous pouvons résoudre efficacement le problème de l'échec de PHP à envoyer des fichiers volumineux. Lors du traitement de fichiers volumineux, l'utilisation appropriée de la transmission fragmentée, l'augmentation des délais d'attente et des limites de mémoire, ainsi que l'utilisation de la transmission en streaming peuvent améliorer l'efficacité et la stabilité de la transmission de fichiers. Dans les projets réels, choisir la méthode appropriée en fonction de la situation spécifique peut mieux répondre aux besoins de transfert de fichiers volumineux. 🎜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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Comment déboguer le mode CLI dans phpstorm? Lors du développement avec PHPStorm, nous devons parfois déboguer PHP en mode interface de ligne de commande (CLI) ...

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.
