opendir () 로 디렉토리를 스캔 할 때 realpath_cache_size를 결합하여 실행 효율성을 향상시키는 방법?
PHP에서 opendir ()는 디렉토리를 열고 디렉토리 핸들을 반환하는 데 사용되는 함수입니다. 디렉토리의 내용을 통과 해야하는 경우 일반적으로 OpenDir () , readDir () 및 CloseBir ()를 사용하여 달성합니다. 그러나 많은 수의 파일 및 디렉토리를 처리 할 때 프로그램의 효율성은 병목 현상이 될 수 있습니다. 디렉토리 트래버스의 성능을 향상시키기 위해 PHP는 구성 옵션 realpath_cache_size를 제공하며, 이는 디렉토리를 스캔 할 때 opendir () 의 실행 효율을 효과적으로 향상시킬 수 있습니다.
RealPath_Cache_Size는 PHP의 RealPath 캐시 크기를 구성하는 지침입니다. 파일 시스템 작업의 PHP, 특히 RealPath () 기능이 호출 될 때 내부 캐시는 파일 경로의 진정한 절대 경로를 저장하여 파일 경로 해상도 작업을 피하기 위해 사용됩니다. 프로그램이 경로 해상도 작업을 자주 수행 해야하는 경우 RealPath_Cache_Size 의 크기를 조정하면 불필요한 경로 해상도가 줄어들어 프로그램 성능이 향상 될 수 있습니다.
PHP가 경로 해상도를 수행 할 때, 다음 번에 사용될 때 캐시 된 결과를 직접 반환 할 수 있도록 구문 분석 경로를 캐시합니다. 기본적으로 PHP의 RealPath_Cache_Size 는 16KB로 설정되어 있으며 대부분의 작은 프로젝트에서 충분합니다. 그러나 대규모 애플리케이션 또는 복잡한 파일 시스템에서 16KB 캐시만으로 필요한 모든 경로를 저장하기에 충분하지 않아 경로 해상도가 자주 발생하여 성능에 영향을 미칩니다.
RealPath_Cache_Size를 늘리면 캐시 용량을 늘리고 경로 해상도 수를 줄여 OpenDir ()를 사용하여 많은 수의 파일 및 디렉토리를 스캔 할 때 효율성을 크게 향상시킬 수 있습니다.
실제 개발에서 OpenDir ()를 사용하여 디렉토리를 스캔하면 PHP는 각 파일 및 디렉토리의 경로를 구문 분석합니다. 디렉토리에 많은 파일 또는 하위 디렉토리가 있다고 가정하면 PHP는 이러한 경로를 차례로 구문 분석합니다. 구문 분석 할 때마다 경로가 캐시에 있지 않으면 PHP는 realPath ()를 호출하여 경로를 구문 분석하고 캐시합니다. 캐시 크기가 충분하지 않으면 경로 해상도가 느려져 OpenDir () 의 실행 속도에 영향을 줄 수 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 더 큰 것을 설정하십시오 realpath_cache_size(예를 들어 64KB)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'realpath_cache_size'</span></span><span>, </span><span><span class="hljs-string">'64K'</span></span><span>);
</span><span><span class="hljs-comment">// 디렉토리를 엽니 다</span></span><span>
</span><span><span class="hljs-variable">$dir</span></span><span> = </span><span><span class="hljs-title function_ invoke__">opendir</span></span><span>(</span><span><span class="hljs-string">'/path/to/directory'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$dir</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">readdir</span></span><span>(</span><span><span class="hljs-variable">$dir</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span><span><span class="hljs-title function_ invoke__">closedir</span></span><span>(</span><span><span class="hljs-variable">$dir</span></span><span>);
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
더 큰 RealPath_Cache_Size를 설정하면 PHP는 더 많은 경로 정보를 캐시합니다. 디렉토리를 통과 할 때 디스크의 경로 해상도 작동을 줄여서 디렉토리 스캔 효율을 향상시킬 수 있습니다.
realpath_cache_size 의 크기는 php 구성 파일 php.ini 에서 조정하거나 코드에서 ini_set ()을 사용하여 동적으로 설정할 수 있습니다. 기본값은 16KB이지만 많은 파일 경로 해상도가 필요한 응용 프로그램의 경우이 값을 적절하게 증가시킬 수 있습니다. 특정 설정 방법은 다음과 같습니다.
<span><span><span class="hljs-attr">realpath_cache_size</span></span><span> = </span><span><span class="hljs-number">64</span></span><span>K
</span></span>
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'realpath_cache_size'</span></span><span>, </span><span><span class="hljs-string">'64K'</span></span><span>);
</span></span>
RealPath_Cache_Size 의 증가는 성능을 향상시킬 수 있지만 더 많은 메모리를 차지할 수 있으므로 실제 조건에 따라 조정해야합니다.
realpath_cache_size를 조정하는 것 외에도 opendir () 및 파일 스캔을 사용할 때 다음과 같은 최적화 전략을 고려할 수도 있습니다.
반복 스캔을 피하십시오 : 디렉토리를 가로 지르면 이미 처리 된 디렉토리 또는 파일의 반복 스캔을 피하십시오. 캐시 된 스캔 된 디렉토리 목록으로 불필요한 스캔 작업을 줄일 수 있습니다.
배치 처리 : 디렉토리에 많은 파일이 포함 된 경우 모든 파일을 한 번에 읽지 않기 위해 배치 처리를 고려하여 메모리 사용을 과도하게 만듭니다.
비동기 또는 병렬 처리 : 대규모 파일 스캔 작업의 경우 스캔 효율을 향상시키기 위해 비동기 또는 멀티 스레딩 기술 (예 : PTHREADS 또는 PARESION EXTENIONS)을 사용하는 것을 고려하십시오.
Opendir () 와 RealPath_Cache_Size 의 조합은 PHP에서 디렉토리를 스캔 할 때 실행 효율성을 크게 향상시킬 수 있습니다. RealPath_Cache_Size를 적절하게 조정함으로써 경로 해상도의 수를 줄여서 프로그램의 성능을 향상시킬 수 있습니다. 그러나이 구성을 조정할 때 메모리 소비를 고려하고 적절한 캐시 크기를 선택해야합니다. 또한 전반적인 실행 효율성을 향상시키기 위해 디렉토리 스캔 작업을 추가로 최적화하는 다른 방법이 많이 있습니다. 대규모 파일 및 디렉토리를 다룰 때 합리적인 최적화 전략을 통해 파일 시스템 작업을보다 효율적이고 안정적으로 만들 수 있습니다.