PHP에서는 포함 , 요구 , file_exists 또는 is_file 과 같은 파일 작동 함수를 호출 할 때마다 PHP는 주어진 경로의 실제 절대 경로를 구문 분석해야합니다. 이 구문 분석 프로세스에는 특히 Symlinks 또는 상대 경로를 사용할 때 파일 시스템을 쿼리하는 것이 포함됩니다.
시스템 호출의 오버 헤드를 줄이기 위해 PHP는 경로 해상도 결과를 캐시하기 위해 "RealPath 캐시"를 도입했습니다. RealPath_Cache_Size 는이 캐시의 크기 제한이며 장치는 바이트입니다. 기본값은 일반적으로 16K 이며 소규모 프로젝트에서는 충분하지만 대규모 프로젝트를 신속하게 채우는 경향이 있습니다.
PHP의 RealPath 캐시는 경로 해상도 결과를 저장하는 데 사용되는 메모리 해시 테이블입니다. PHP 스크립트가 경로를 구문 분석해야 할 때마다 먼저 캐시를 찾습니다.
캐시가 발생하면 시스템 호출을 저장하기 위해 캐시 값이 직접 반환됩니다.
캐시가 누락되면 시스템 호출이 이루어지면 경로가 구문 분석되고 결과가 캐시에 넣습니다.
캐시가 가득 차면 이전 캐시 항목이 제거됩니다.
이 메커니즘은 간단하지만 복잡한 파일 구조를 가진 프로젝트에서 많은 의존성에 의존합니다. 예를 들어, 자동로드 (예 : Composer Autoloader)를 사용하는 프로젝트는 단일 요청에 수백 개의 파일을로드 할 수 있으며 각각은 경로 해상도를 트리거 해야합니다 . 캐시가 불충분 한 경우 각 요청이 동일한 구문 분석을 반복하여 불필요한 성능 손실을 초래할 수 있습니다.
다음 코드 스 니펫이 있다고 가정합니다.
<code> & lt;? php for ($ i = 0; $ i & lt; 1000; $ i ++) {요구 '/var/www/gitbox.net/project/lib/module'. ($ i % 10). '/class.php'; } </code>이 예에서는 10 개의 다른 경로 만 있지만 RealPath 캐시가 너무 작 으면 PHP가 필요할 때마다 경로를 다시 부르므로 추가 I/O 오버 헤드가 발생합니다. 캐시 적중률이 높으면 구문 분석 수가 크게 줄어들어 전체 실행 효율이 향상 될 수 있습니다.
PHP의 phpinfo () 페이지를 통해 현재 RealPath 캐시 구성 및 사용법을 보거나 다음 코드 스 니펫을 사용하여 캐시 사용을 동적으로 볼 수 있습니다.
<code> & lt;? php print_r (realpath_cache_get ()); </코드>캐시 크기를 조정하려면 php.ini 파일에서 다음 구성을 추가하거나 수정하십시오.
<code> realpath_cache_size = 128k </code>높은 동시성 환경에서 실행되는 대형 프레임 워크 (Laravel, Symfony 등) 또는 PHP-FPM 프로젝트의 경우 캐시가 자주 실패하지 않도록 128k 이상으로 설정하는 것이 좋습니다.
캐시 크기 외에도 RealPath_Cache_TTL 은 또한 관련 매개 변수이며, 캐시 항목의 생존 시간을 초 내에 지정합니다. 기본값은 120 초입니다.
<code> realpath_cache_ttl = 300 </code>자주 배포되고 파일 구조가 빈번한 개발 환경 에서이 값은 적절하게 단축 될 수 있습니다. 생산 환경에서는 일반적으로 성능을 향상시키기 위해 더 높은 것으로 설정할 수 있습니다.