<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_streamCependant, 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:
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.
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.
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:
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 ); ?>