작업하고있는 웹 응용 프로그램에서 다소 이상한 간헐적 오류가 발생합니다. 특히 긴 처리 페이지가 실행되고 (100000 개 이상의 레코드 검색 및 정렬), 이후의 모든 페이지로드는 사용 된 싱글 톤 오브젝트에서 다음과 같은 몇 가지 오류로 실패합니다.
PHP 경고 : 33 행의 E : \ tracking \ lib \ Controller \ ControllerChainManager.class.php에있는 객체가 아닌 객체의 속성
코드의 관련 섹션은 다음과 같습니다 (화살표로 표시된 33 행).
class ControllerManager {
private static $Instance;
private $CurrentController = 0;
private $ControllerArray;
private $ControllerArrayIndex = 0;
/**
* Constructor
* @return null;
*/
private function __construct() {
$this->ControllerArray = array(); <-- LINE 33
return;
}
/**
* Singleton instance function
* @return ControllerManager;
*/
public static function Inst() {
if (!isset(self::$Instance)) {
$c = __CLASS__;
self::$Instance = new $c;
}
return self::$Instance;
}
//*** snip the rest of the class definition ***
이제,이 파일은 모든 요청에 포함되어 있지만 잘못된 요청이 이루어지면, 이러한 오류는 아파치 서버가 재시작 될 때까지 (결국 선을 치명적인 오류로 이어지는) 발생하는 유지합니다. 더 작은 데이터 세트를 사용하여 동일한 요청이 수행되면 오류는 발생하지 않으며 시스템은 정상적으로 수행됩니다.
주어진 오류 텍스트 (
)에 대한 관련 검색어로 아무 것도 보이지 않는 것 같습니다. 단 하나의 패턴 인스턴스에서만 문제가 실패한다는 단서가
일 수는 있지만 나에게 맞지 않을 수도 있습니다. 무슨 일이 일어나는지 보여줘.
서버는 PHP 5.3입니다.
누구든지 이전과 같은 오류가 표시됩니까? 다소 우스꽝 스럽습니다.
편집 : 로그를 통한 추가 트롤링은 이제이 오류를 보여주는 또 다른 클래스를 드러내고 있지만 이번에는 싱글 톤이 아닙니다. E에 비 객체의 속성을 할당하는 시도 :에 ...
PHP 경고 결과
class ControllerChainData { public $Action; public $Controller; public $Vars; public function __construct($controller,$action,$vars = null) { $this->Controller = $controller; //<-- 10 $this->Action = $action; //<-- 11 $this->Vars = $vars; //<-- 12 } }
\ 추적 \ lib 디렉토리 \ 컨트롤러 \ ControllerChainManager.class.php 라인에 10
PHP 경고 : E에 비 객체의 속성을 할당하는 시도 : \ 추적 \ lib 디렉토리 \ 컨트롤러 \ ControllerChainManager.class.php 라인 (11)
PHP 경고 :이 시도 t는 E에 비 객체의 속성을 할당 : \ 추적 \ lib 디렉토리 \ 컨트롤러 \ ControllerChainManager.class.php 클래스 ControllerChainData의 목적은 인스턴스화 될 때마다 라인 (12)
합니다.
편집 2 :
public function RegisterControllerIntoChain ($controller, $action, $vars = null) {
$contpath = 'controllers/' . $controller . '/' . $controller . '.cont.php';
if (file_exists($contpath)) {
include_once($contpath);
$this->ControllerArray[$this->ControllerArrayIndex++] = new ControllerChainData($controller,$action,$vars);
return true;
}
return false;
}
편집 : 3 : 아래의 코멘트에 대응하여, CCD는 ControllerChainManager 클래스의 다음의 방법에서 호출이 이전에 유래 포스트 같은데는/관련이 같은 버그가있을 수 있습니다 :
Non-deterministic object reference bug in PHP 5.3.X
편집 3A ::
이 오류 보고서 내 정확한 문제를 설명한다(이전 SO 게시물에서 찾았습니다.) 가능한 한 빨리 서버에서 PHP를 업데이트 할 예정입니다. 문제가 해결되면 정보를 게시하겠습니다.
이러한 오류가 발생하는 실제 코드, 즉 'ControllerChainData'가 초기화되는 위치를 표시 할 수 있습니까? – xzyfer
문제 없음 : (메인 포스트 대신 편집하여 쉽게 볼 수 있음). 이 함수는 모든 페이지로드시 호출됩니다. $ controller, $ action 및 $ vars는 필터링 된 $ _GET에서 채워집니다. – ASpencer