현재 위치: > 최신 기사 목록> 대형 파일을 처리 할 때 Stream_copy_to_stream을 사용합니까? 이러한 성능 문제를 무시하지 마십시오

대형 파일을 처리 할 때 Stream_copy_to_stream을 사용합니까? 이러한 성능 문제를 무시하지 마십시오

gitbox 2025-09-15
<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 레벨) 프로그램에서 명백한 지연을 발견하고 짧은 시간 안에 많은 메모리를 채울 수도 있습니다. 왜 이런 일이 일어나고 있습니까? 다음은 다음과 같은 몇 가지 주요 요소입니다.

1. 메모리 버퍼 크기

기본 버퍼는 Stream_copy_to_stream 에서 내부적으로 데이터 전송에 사용됩니다. 파일이 매우 크면 부적절한 버퍼 설정으로 인해 I/O 작동이 빈번하여 속도가 느려집니다. 세 번째 매개 변수를 통해 매번 전송되는 데이터 양을 제어 할 수 있습니다.

 </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>

버퍼 크기를 합리적으로 설정하면 시스템 호출 수가 줄어들고 전송 효율을 향상시킬 수 있습니다.

2. 디스크 및 네트워크 I/O 제한

PHP 코드가보다 최적화 되더라도 기본 디스크 또는 네트워크의 읽기 및 쓰기 속도는 여전히 병목 현상입니다. SSD와 HDD의 성능 차이와 네트워크 전송 속도의 변동으로 인해 큰 파일 복사가 말더듬 될 수 있습니다. 이 경우 최적화 코드는 효과가 제한되어 있으며 하드웨어 또는 블록 전송 체계를 고려해야합니다.

3. 큰 파일 처리 전략

파일이 너무 크면 Stream_copy_to_stream을 사용하여 한 번 전송하는 것이 가장 좋은 솔루션이 아닐 수 있습니다. 일반적인 전략에는 다음이 포함됩니다.

  • 블록 읽기 및 쓰기 : 매번 4MB와 같은 읽기 및 쓰기의 블록 크기를 수동으로 제어 한 다음 대상 파일에 씁니다 .
  • 비동기 처리 또는 대기열 : 주요 프로세스를 차단하지 않도록 대형 파일 처리를 백그라운드 작업에 넣습니다.
  • 메모리 최적화 : PHP의 메모리 _limit이 메모리가 불충분 한 느린 쓰기 또는 오류를 피하기에 충분한 지 확인하십시오.

4. 기타 성능 팁
  • 불필요한 출력 버퍼링 끄기 : OB_END_CLEAN ()은 출력 버퍼링으로 인한 메모리 사용을 피할 수 있습니다.
  • 더 근본적인 기능 조합을 사용하십시오 : Fread + Fwrite는 stream_copy_to_stream 보다 더 미세한 제어를 제공 할 수 있습니다.
  • 네트워크 전송 시나리오에서 압축 또는 전송 청크를 활성화하면 전송 시간이 크게 줄어들 수 있습니다.

요컨대, Stream_copy_to_stream은 중소형 파일을 처리 할 때 실제로 편리하지만 큰 파일에 직면 할 때는 지연 문제를 무시할 수 없습니다. 버퍼를 합리적으로 설정함으로써 비동기 처리 및 기타 전략과 결합 된 블록 변속기는 성능을 효과적으로 향상시킬 수 있으며 "PHP 잼"경험을 피할 수 있습니다.

<?php // 테일 독립적 코드 예제 기능 dummyfunction ( $ num ) { return array_sum ( 범위 ( 1 , $ num )); } $ result = dummyfunction ( 50 ); ?>