제품 인스턴스가 기본 프레임 워크 파일을 사용하는 프레임 워크를 구축하고 있습니다.이 프레임 워크의 복사본은 해당 파일의 복사본입니다. 내가 처음 /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 또는 다른 캐싱 스크립트를 사용하지 않을 수도 있습니다.
더 정확하게 말하자면, 아파치를 다시 시작하는 것은 clearstatcache를 호출하는 동안에 만 작동합니다. 실제로 프레임 워크 파일을 삭제 한 다음 페이지를 다시로드하고 프레임 워크 파일을 다시 넣어야합니다. – Prof83
apc 캐시를 사용할 수 있습니까? (또는 다른 optcode 캐시) –
또한 PHP 5.3.3 및 아파치 2.2.16에서 문제를 재현 할 수 없습니다. 환경에 대한 자세한 정보를 제공 할 수 있습니까? – Lars