Maison développement back-end tutoriel php 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

Mar 07, 2024 pm 09:33 PM
php script php Compétences en résolution Envoi de fichiers

Conseils pour résoudre léchec de PHP lors de lenvoi 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;
Copier après la connexion

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_flushflush将内容立即发送给客户端,而不是等到整个文件都读取完毕。

二、增加超时时间和内存限制

如果PHP脚本在传输大文件时遇到超时或内存耗尽的问题,可以通过增加超时时间和内存限制来解决。可以在PHP脚本开始处设置如下参数:

ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');
Copier après la connexion

其中,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;
Copier après la connexion

以上代码通过readfile

2. Augmentez le délai d'attente et la limite de mémoire

Si le script PHP rencontre des problèmes de délai d'attente ou d'épuisement de la mémoire lors du transfert de fichiers volumineux, cela peut être résolu en augmentant le délai d'attente et la limite de mémoire. Vous pouvez définir les paramètres suivants au début du script PHP :

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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

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.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

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

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

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.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

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

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

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,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

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? Comment déboguer le mode CLI dans phpstorm? Apr 01, 2025 pm 02:57 PM

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) ...

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

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.

See all articles