문제

우리는 Opcode 캐시로 APC를 사용하고 있습니다. APC가 파일의 존재하지 않는 상태를 캐시 할 수있는 방법이 있습니까? 우리는 설정했습니다 apc.stat = 0 그리고 apc.include_once_override = 1. 전화의 성능을 향상시키기 위해 할 일이 더 있습니까? include_once 파일 시스템에 없을 수있는 파일에서? 그것이 존재한다면 분명히 우리는 그것을 포함시키고 싶습니다. 그러나 존재하지 않으면 절대 참석하고 우리는 PHP가 전화하기를 원하지 않습니다 open() 확인 요청의 모든 파일에서.

일부 배경의 경우 : 우리는 하나의 기본 사이트가 있지만 고객별로 고객별로 사이트에 사용자 정의를 제공합니다. 일부 고객은 사용자 정의 로그인 페이지가 있고 다른 고객은 완전히 고유 한 페이지를 가지고 있습니다.

우리는 필요에 따라 컨트롤러를 무시할 수 있도록 약간 특이한 방법으로 Zend 프레임 워크를 사용하고 있습니다. 우리 사이트에는 컨트롤러가 호출 될 수 있습니다 LoginController, 파일에 정의되었습니다 controllers/LoginController.php. 그러나 고객 "회사"는 사용자 정의 로그인 페이지가 필요할 수 있으므로 새로운 클래스를 작성합니다. Company_LoginController 디렉토리에 정의됩니다 controllers/company/LoginController.php. (이 이름 지정 규칙은 우리가 "모듈"의 Zend 프레임 워크 개념과 일치 할 수있게 해줍니다.)

우리가 수업을 다룰 때, 우리는 기본적으로 다음과 같은 일을합니다.

include_once APPLICATION_PATH . '/controllers/company/LoginController.php';
if (class_exists("Company_LoginController")) {
    echo 'customer-specific controller exists';
} else {
    include_once APPLICATION_PATH . '/controllers/LoginController.php';
    echo 'customer-specific controller does not exist; using default';
}

파일 인 경우 /controllers/company/LoginController.php APC는 첫 번째 요청에 따라 캐시하고 파일 시스템에서 다시는 가져 오지 않습니다. 그러나 파일 인 경우 /controllers/company/LoginController.php 하다 ~ 아니다 존재, 나는 APC 가이 파일의 존재를 두 번 이상 확인하는 것을 원하지 않습니다. 이런 일이 일어나게하는 방법이 있습니까?

도움이 되었습니까?

해결책

회사 디렉토리에서 빈 파일 만 만들 수 있습니까? APC는 두 번로드하지 않기 때문에 서버가 처음 시작할 때 "로드"되는 빈 파일이 있으면 아무런 해가 없습니다.

다른 팁

Jmucchiello의 답변은 단순성에 대한 나의 투표권을 얻지 만, 어떤 이유로 실용적이지 않다면 항상 어려운 일을 할 수 있습니다.

다음은 거칠고 테스트되지 않은 예이지만 APC 직접 파일의 존재를 수동으로 저장하는 기본 아이디어를 전달해야합니다.

function conditional_include($file) {
  $key = 'file-exists-' . $file;
  //fetch cache key; if it does not exist, then...
  if(($fileExists = apc_fetch($key)) === false) {
    //actually hit the disk to look for the file, and store the result
    apc_store($key, $fileExists = (file_exists($file) ? 1 : 0));
  }

  //only include the file if it exists.
  if($fileExists)
   include_once $file;
}

Zend Framework를 사용하는 경우 Zend_loader Autoloading Magic을 사용하여 필요한 파일을로드하는 것이 좋습니다. AutoLoader를 사용하면 ZF의 거의 모든 포함 _once 호출 (Zend_loader 클래스의 통화 제외)을 제거 할 수 있습니다. 경고는 클래스와 파일 내밍 스타일에 따라 다르지만 Autoloader를 다시 작성/확장하여 이에 대응할 수 있습니다.

이것은 당신이 추구하는 것이 아닐 수도 있지만 그럼에도 불구하고 도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top