문제

APC 또는 Xcache를 Opcode로 사용하여 PHP 페이지를 캐시하려고합니다. 나는 그것을 Zend와 Proctrine과 함께 사용하고 있으며 Autoloader에 문제가 있습니다.

APC로 시도하면 다음을받습니다.

Fatal error: spl_autoload() [<a href='function.spl-autoload'>function.spl-autoload</a>]: 
  Class Doctrine_Event could not be loaded in 
  C:\\[mydir]\\library\\doctrine\\Doctrine\\Record.php on line 777

xcache로 시도하면 다음을 얻을 수 있습니다.

PHP Fatal error: Cannot redeclare class Zend_Registry in 
  C:\\[mydir]\\library\\zendframework\\Zend\\Registry.php on line 0

Windows 상자에서 Zend 1.9.1, Doctrine 1.1을 실행하고 있습니다.

내 부트 스트랩은 다음과 같습니다.

set_include_path(dirname(__FILE__).'/../library/zendframework'
. PATH_SEPARATOR . dirname(__FILE__).'/../library/doctrine'.....

require 'Zend/Loader/Autoloader.php';

$loader = Zend_Loader_Autoloader::getInstance();
$loader->suppressNotFoundWarnings(false);
$loader->setFallbackAutoloader(true);

내가 읽은 내용에서 APC 또는 Xcache를 사용하는 것은 거의 성능을 위해 필수이지만 작동하지 않는 것 같습니다. 어떤 아이디어?

도움이 되었습니까?

해결책

당신은 "Zend_Session::writeClose(true);"Index.php의 끝에.
이것은 필요한 개체 (Zend_loader 등)가 파괴되기 전에 세션을 영구 상태로 작성합니다.

더 나은: 등록하십시오 종료 기능.
따라서 사용하더라도 실행됩니다 exit(), die() 또는 a fatal error 발생 :

register_shutdown_function(array('Zend_Session', 'writeClose'), true);

다른 팁

사용자 정의 세션 처리 및 APC 캐시의 문제와 유사 할 수 있습니다. 사용자 정의 세션 핸들러를 할당 한 경우 PHP에서 RSHUTDOWN에 등록됩니다. APC가 사용하는 것과 동일한 루틴이므로 PHP에서 내부 충돌을 일으키고 사용자 정의 세션 핸들러가 모든 상황에서 닫히지는 않습니다.

따라서 종료시 사용자 정의 세션 핸들러를 수동으로 닫아야합니다.

a "Zend_Session::writeClose(true);" index.php가 끝날 때마다 출구가있는 경우이를 수행하는 가장 좋은 방법은 아닙니다. 어디서나 스크립트를 호출합니다.

이러한 방식으로 종료 핸들러를 등록하는 것이 좋습니다.

function shutdown()
{
 Zend_Session::writeClose(true);
}

register_shutdown_function('shutdown');

다른 스크립트가 실행되기 전에 종료 절차가 등록되도록 index.php 파일의 상단에 넣으십시오.

포함 된 경로를 멍청이하는 것이 있습니까? 첫 번째 APC 예제에서 해당 라인 바로 앞의 포함 경로를 로그 아웃 할 수도 있습니다.

Xcache One은 정말 이상합니다. 그 프로젝트는 꽤 죽었고 PHP 5.2+에서는 믿지 않습니다. 대신 eaccelerator를 사용해 보시겠습니까? 우리는 그것에 가장 적합한 행운을 가지고있었습니다.

Benjamin Cremer, 당신은 생명을 구합니다. 위의 (원본) 문제는 세션과 함께 자동로드하는 특별한 경우이지만 세션을 마감하는 것은 그러한 경우 일반적인 해결책 인 것 같습니다. 그래도 메모 :

자본 매출 Zend_Session::writeClose(true); 스크립트가 끝나면 항상 자르지 않을 수 있습니다. exit;'에스, die();코드의 등. 이 경우 사용할 수 있습니다

register_shutdown_function(array('Zend_Session', 'writeClose'), true);

또는 간단히

register_shutdown_function('session_write_close');

세션에 Zend를 사용하지 않는 경우.

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