<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 事前に依存しないコードの例</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>大きなファイルを処理するときに使用します <code>stream_copy_to_streamただし、ファイルが非常に大きい場合(数百MBまたはGBレベルさえ)、プログラムに明らかな遅れがあり、短期間で多くのメモリを埋めることさえできます。なぜこれが起こっているのですか?ここに注意を払うためのいくつかの重要な要素があります:
デフォルトのバッファーは、 Stream_copy_to_streamで内部的にデータ送信に使用されます。ファイルが非常に大きい場合、不適切なバッファー設定が頻繁にI/O操作につながる可能性があり、これにより減速します。 3番目のパラメーターを介して、毎回送信されるデータの量を制御できます。
</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">// 各コピー1MB</span></span><span>
バッファサイズを合理的に設定すると、システム呼び出しの数を減らし、伝送効率を向上させることができます。
PHPコードがより最適化されたとしても、基礎となるディスクまたはネットワークの読み取り速度は依然としてボトルネックです。 SSDとHDDのパフォーマンスの違いとネットワークトランスミッション速度の変動により、大きなファイルのコピーがutter音を立てる可能性があります。この場合、最適化コードの効果は限られており、ハードウェアまたはブロック送信スキームを考慮する必要があります。
ファイルが大きすぎる場合、 stream_copy_to_streamを使用して1回転送するのは最良のソリューションではない場合があります。一般的な戦略には以下が含まれます。
要するに、 Stream_Copy_To_streamは、中小サイズのファイルを扱うときに確かに便利ですが、大きなファイルに直面している場合、LAGの問題は無視できません。バッファー、ブロック伝送、非同期処理やその他の戦略を組み合わせて、パフォーマンスを効果的に改善し、「PHPジャム」エクスペリエンスを回避できます。
<?php //テールに依存しないコードの例 関数 DummyFunction ( $ num ){ return array_sum ( range ( 1 、 $ num )); } $ result = dummyFunction ( 50 ); ?>