데이터를 가져 오기 위해 dll 형식의 윈도우 용으로 작성된 응용 프로그램 라이브러리를 사용하여 PI 데이터 소스에 액세스해야하는 PHP 웹 응용 프로그램이 있습니다. PHP의 non-polimorphism 때문에 polimorphism 라이브러리를 사용하기 위해 C# -Dotnet으로 작성된 래퍼를 사용하고 있습니다.Com 객체 작성시 PHP 치명적 오류가 발생했습니다.
PHP->Wrapper->Lib->PI-System
문제 : PHP는 로그를 남기지 않고 com 객체 생성시 거의 항상 두 번째 요청마다 충돌합니다.
$connection = new Com('Something.SomethingClass');
변수 $ 연결을 사용하지 : 내 생각은 기존의 PHP 코드에서 아마 뭔가이 치명적 오류가 발생하고 디버깅과 노력이 많이 후 나는이에 코드를 단순화이 잘못 될 수 있다고했다 못! 아직도 매일 2 시간 나는
>Faulting application name: php-cgi.exe, version: 5.4.11.0, time stamp: 0x511a30ec
>Faulting module name: KERNELBASE.dll, version: 6.1.7601.17932, time stamp: 0x503275ba
>Exception code: 0xc0000005
>Fault offset: 0x0000d3cf
>Faulting process id: 0x14d0
>Faulting application start time: 0x01ce89dd0ae23748
>Faulting application path: C:\Program Files\Zend\ZendServer\bin\php-cgi.exe
>Faulting module path: C:\Windows\system32\KERNELBASE.dll
그래서 내가 더 COM 객체를 생성하려고 (AN 1000 오류로 창 오류 로그에 기록하고, 1001 - 정보) PHP-충돌을 얻을 ..
$connArray = array();
for($i = 0; $i < 50 ; $i++){
Core_System_Log::getInstance()->logWithoutMessageId('Before: ' . $i ,Core_System_Log::DEBUG);
$connArray[i] = new Com('Something.SomethingClass');
Core_System_Log::getInstance()->logWithoutMessageId('After: ' . $i, Core_System_Log::DEBUG);
}
모든 50 문제없이 생성 된, 다시 매 2 시간 나는 PHP 치명적인 오류가있어. 나는 50 개 모두를 사용하려고 시도했는데, 그들은 모두 PI 시스템에서 아무런 문제없이 값을 읽었습니다.
변수를 설정 해제하고 GC를 호출하고 C#에서 소멸자를 호출하고 C#의 생성자를 확인하려고했습니다. (라이브러리의 객체를 만들고 예외도 없었습니다. 객체가 정상적으로 만들어졌으며 여전히 PHP가 손상되었습니다.) 그러나 문제는 사라지지 않았다.
그래서, 어떤 생각입니까? 내가 뭔가 잘못하고있다. (매 2 시간마다 값을 올바르게 읽는 것이 어떻게 잘못 될 수 있는가?)
환경은 테스트 :
- OS : 윈도우 서버 2008 R2 64 비트/Windows 7의 교수 SP1 32/64 비트
- PHP : 5.3.9/5.3.14/5.3.21/5.4.11 을
- WS : Apache 및 IIS (몇 가지 다른 버전)
업데이트 : 문제는 마침내 C# 코드에있었습니다. COM 객체가 닫히거나 삭제되어 C#이 (다시 예외없이) 중단되고 PHP 치명적인 오류가 발생하는 결과를 초래하는 GC 호출이있었습니다.
감사합니다.