Position actuelle: Accueil> Derniers articles> L'utilisation de stream_copy_to_stream lors du traitement des fichiers volumineuses sera-t-elle bégayée? N'ignorez pas ces problèmes de performance

L'utilisation de stream_copy_to_stream lors du traitement des fichiers volumineuses sera-t-elle bégayée? N'ignorez pas ces problèmes de performance

gitbox 2025-09-15
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Exemple de code pré-indépendant</span></span><span>
</span><span><span class="hljs-variable">$dummyArray</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$dummyArray</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-variable">$valueSquared</span></span><span> = </span><span><span class="hljs-variable">$value</span></span><span> ** </span><span><span class="hljs-number">2</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h1>Utiliser lors du traitement des fichiers volumineux <code>stream_copy_to_stream

Cependant, lorsque le fichier est très grand (quelques centaines de Mo ou même le niveau GB), vous pouvez trouver un décalage évident dans le programme et même remplir beaucoup de mémoire dans un court laps de temps. Pourquoi cela se produit-il? Voici quelques facteurs clés auxquels faire attention:

1. Taille du tampon de mémoire

Le tampon par défaut sera utilisé pour la transmission de données en interne sur Stream_Copy_To_Stream . Si le fichier est très important, les paramètres de tampon inappropriés peuvent conduire à des opérations d'E / S fréquentes, ce qui ralentira. Vous pouvez contrôler la quantité de données transmises à chaque fois via le troisième paramètre:

 </span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-variable">$dest</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span> * </span><span><span class="hljs-number">1024</span></span><span>); </span><span><span class="hljs-comment">// Chaque copie1MB</span></span><span>

La définition raisonnable de la taille du tampon peut réduire le nombre d'appels système et améliorer l'efficacité de la transmission.

2. Restrictions d'E / S de disque et de réseau

Même si le code PHP est écrit plus optimisé, la vitesse de lecture et d'écriture du disque ou du réseau sous-jacent est toujours un goulot d'étranglement. Les différences de performances entre le SSD et le disque dur et les fluctuations de la vitesse de transmission du réseau peuvent entraîner le bégaiement de la copie des fichiers. Dans ce cas, le code d'optimisation a un effet limité et nécessite une prise en compte des schémas de transmission matériel ou de bloc.

3. Stratégie de traitement des fichiers importante

Si le fichier est trop grand, ce n'est peut-être pas la meilleure solution pour utiliser stream_copy_to_stream pour le transférer une fois. Les stratégies courantes comprennent:

  • Bloquer la lecture et l'écriture: Contrôlez manuellement la taille du bloc de lecture et d'écriture, telles que 4 Mo à chaque fois, puis écrivez dans le fichier cible.
  • Traitement ou file d'attente asynchrone: Mettez le traitement de fichiers grand dans les tâches d'arrière-plan pour éviter de bloquer le processus principal.
  • Optimisation de la mémoire: assurez-vous que Memory_limit de PHP est suffisant pour éviter les écritures ou les erreurs lentes causées par une mémoire insuffisante.

4. Autres conseils de performance
  • Désactiver la tampon de sortie inutile: ob_end_clean () peut éviter l'utilisation de la mémoire causée par la tampon de sortie.
  • Utilisez une combinaison de fonctions plus sous-jacente: Fread + FWrite peut fournir un contrôle plus fin que Stream_Copy_To_stream .
  • Dans les scénarios de transmission du réseau, l'activation de la compression ou de la transmission peut réduire considérablement le temps de transmission.

En bref, Stream_Copy_To_Stream est en effet pratique lorsqu'il s'agit de fichiers petits et moyens, mais lorsqu'ils sont confrontés à des fichiers volumineux, le problème du décalage ne peut pas être ignoré. En réglant raisonnablement les tampons, la transmission de blocs, combinée à un traitement asynchrone et à d'autres stratégies, les performances peuvent être efficacement améliorées et l'expérience des "JAM PHP" peut être évitée.

<?php // Exemple de code indépendant de la queue fonction dummyFunction ( $ num ) { return array_sum ( plage ( 1 , $ num )); } $ result = dummyFunction ( 50 ); ?>