2012-11-06 4 views
6

제품 인스턴스가 기본 프레임 워크 파일을 사용하는 프레임 워크를 구축하고 있습니다.이 프레임 워크의 복사본은 해당 파일의 복사본입니다. 내가 처음 /view-users.php에 대한 MY_PRODUCT_ROOT에 보이는 것 그 발견되어 있지 않은 경우, 그 다음 MY_FRAMEWORK_ROOT /보기 - 사용자에게 보이는 것 include('view-users.php'); 호출하는 경우 그래서PHP는 경로 순서와 상태 캐시를 포함합니다.

set_include_path(MY_PRODUCT_ROOT.'/' . PATH_SEPARATOR . MY_FRAMEWORK_ROOT.'/'); 

다음이 내가 짓을 달성하기 위해 .php.

이 절차는 제품 루트에 파일을 추가 할 때까지 매우 잘 작동합니다. 나는 PHP/Apache가 include를 캐싱하고 있고 어떤 캐싱 상태를 지우기 위해 clearstatcache(true);을 실행한다고 생각한다. PHP는 include(); 안에 file_exists를 사용합니다. 새 파일이 아직 존재하지 않는다고 생각합니다. 나는 아무 효과없이 아파치를 다시 시작하려고했다.

불행히도 clearstatcache(true);을 실행해도 도움이되지 않습니다. 한 번만 MY_FRAMEWORK_ROOT/파일을 삭제하면 캐시를 지우고 다시 시도하여 MY_PRODUCT_ROOT/파일을 찾습니다. 조금 난처한

, 나는 우리가 파일 (들) 존재 여부의 PHP/아파치의 이해를 새로 고쳐야 알고 있지만 clearstatcache(true); 도움이되지 않는다 ...

어떤 아이디어가?

업데이트 : 수정, 이제 아파치를 다시 시작하는 것이 도움이 될 것 같습니다. 개발 환경은 Windows에서 젠드 서버 CE PHP 5.3.14이다, 생산 환경 않은 CentOS 리눅스 아파치 : 나는 정의

UPDATE를 들어, 기존 MY_FRAMEWORK_ROOT 파일을 겹쳐, MY_PRODUCT_ROOT에 파일을 추가 할 때이 경우에만 발생하는 것을 반복 , PHP 5.3+. 내 dev 환경에서 Zend optimizer가 활성화되었다는 사실은 APC 또는 다른 캐싱 스크립트를 사용하지 않을 수도 있습니다.

+0

더 정확하게 말하자면, 아파치를 다시 시작하는 것은 clearstatcache를 호출하는 동안에 만 작동합니다. 실제로 프레임 워크 파일을 삭제 한 다음 페이지를 다시로드하고 프레임 워크 파일을 다시 넣어야합니다. – Prof83

+1

apc 캐시를 사용할 수 있습니까? (또는 다른 optcode 캐시) –

+0

또한 PHP 5.3.3 및 아파치 2.2.16에서 문제를 재현 할 수 없습니다. 환경에 대한 자세한 정보를 제공 할 수 있습니까? – Lars

답변

2

Zend Optimizer+은 opcode 캐싱 및 최적화를 통해 PHP 실행을 가속화합니다. 미리 컴파일 된 스크립트 바이트 코드를 공유 메모리에 저장합니다. 이것은 디스크에서 코드를 읽고 나중에 액세스 할 때 컴파일하는 단계를 제거합니다. 성능 향상을 위해 저장된 바이트 코드는 더 빠른 실행을 위해 최적화되었습니다.

include에있는 파일 내용을 캐싱 중이므로 clearstatcache가 작동하지 않습니다. Zend Optimizer를 사용하지 않도록 설정 했으므로 이제 작동합니다.

+1

당신 만의 답을 수락 할 수 있습니다. 또한,'clearstatcache (true, true)'가 Zend Optimizer +가 활성화되었을 때 차이점이 있는지 확인해 주시겠습니까? 그렇지 않은 경우 제품 홈페이지에서 버그 보고서를 제출해야합니다. – Lars

+0

감사합니다. @Lars가 테스트 할 것입니다 ... – Prof83