2011-06-15 2 views
5

먼저 php4Delphi이 아니고 RadPHP (이전에는 Delphi For PHP)입니다.Delphi 2010 및 php4Delphi를 사용하여 PHP 확장 기능 작성

  • 델파이 2010
  • PHP 5.3.6 (VC9, NTS)
  • php4Delphi 7.2
  • 윈도우 서버 (VC9 지시어로 컴파일) 2008 R2
  • 7
  • 를 IIS를 사용

php4Delphi delphi_math.dll 예제 확장 프로그램을 실행하려고 할 때 IIS/PHP 서버에서 C : \ Windows \ Temp \ php-errors.log 파일에 다음 오류가 표시됩니다.

[15 6 월 2011 17시 58분 42초] PHP 경고 : PHP 시작 : 동적 라이브러리를로드 할 수 없습니다 'C를 : \ 프로그램 파일 (86) \ PHP는 \ 내선 \의 delphi_math.dll' - 동적 링크 라이브러리 (DLL) 초기화 루틴이 실패했습니다. in Unknown on line 0

PHP의 초기 문제를 이미 해결 했으므로 확장자를 찾을 수 없으므로 경로 스타일 문제가 아닙니다.

php4Delphi 7.2가 최신 PHP 5.3.6을 지원하지 않을 수도 있습니다. 누구든지이 구성을 사용하고 있습니까?

답변

6

PHP는 모듈을 내부적으로로드하려고 시도하지만 실패합니다. 문제는 검색 경로가 아니라 php4delphi를 사용하여 php의 스레드 안전하지 않은 버전을 사용하는 것입니다. php가 확장을로드 할 때 확장 dll에서 콜백 함수의 목록을 받고 dll과 통신하는 데 사용합니다. 스레드 안전 및 스레드 안전 버전의 PHP에 대한 콜백 함수의 매개 변수 목록이 다릅니다. php4delphi는 PHP의 스레드 안전 모델을 위해 만들어졌습니다. TS와 NTS 버전의 차이점은 여기에서 확인할 수 있습니다 : IIS Aid. 이 특별한 경우에는 가능한 경우 스레드 안전하지 않은 PHP를 안전한 PHP로 스레드하도록 변경하는 것이 좋습니다.

NTS PHP의 사용이 필요한 경우 php4delphi의 소스 코드를 수정해야하며이 경우 많은 변경이 필요하다고 생각합니다.

+0

이것과 TS/NTS 버전에 관한 링크를 찾아 주셔서 감사합니다. 나는 NTS가 전통적인 PHP 번들이었고 TS가 새로운 제안이라는 잘못된 인상을 받았다. 이제 내가 역방향으로 TS PHP 버전으로 스와핑하는 데 문제가 없을 것입니다. – LachlanG

1

방금 ​​PHP 5.3.6을 사용하여 php4delphi 7.2의 테스트를 수행했지만 스레드 안전 버전과 확장이 예상대로로드되었습니다. 나는 당신이 명령 줄에서 PHP를 사용하여 스크립트를 실행하는 경우에만 당신이 IIS를 사용하지 않을 때 NTS 버전을 사용할 수 있다고 생각합니다. 어쨌든, NTS 버전으로 테스트를하고 결과를 알려 드리겠습니다.

0

나에게 그것은 PHP 자체 (그리고 delphiphp가 아닌 것)가 모듈을 내부적으로로드하려고 시도하는데 실패한 것 같습니다.

PATH에서 loadlibrary()로 DLL을 검색하지만 32 비트 DLL 대신 64 비트 DLL을 찾을 수 있습니다. 먼저 32 비트 Windows 시스템에서이 설정을 시도하십시오.

p.s. 분명히 "프로그램 파일 (x86)"에서 얻은 64 비트 시스템 표시

+0

경로 문제는 내 첫 번째 문제가되었지만 PHP 경로를 PHP 경로에 추가 (및 재부팅)하여 해결했습니다. 그러나 이것은 다른 문제였습니다.어쨌든 당신의 시간을 가져 주셔서 감사합니다. – LachlanG