Написание PHP расширений с использованием Delphi 2010 и php4Delphi



Во-первых, речь идет о php4Delphi, а не RadPHP (ранее Delphi для PHP).



Используя




  • Delphi 2010

  • PHP 5.3.6 (VC9, NTS)

  • php4Delphi 7.2 (скомпилирован с директивой VC9)

  • Windows Server 2008 R2

  • IIS 7


При попытке запустить php4Delphi delphi_math.пример расширения dll на сервере IIS / PHP я вижу следующую ошибку в C:WindowsTempphp-errors.журнал.




[15-Jun-2011 17: 58: 42] предупреждение PHP:
Запуск PHP: не удается загрузить динамический
библиотека 'C:Program файлы
(x86)PHPextdelphi_math.dll' -
Динамическая библиотека ссылок (DLL)
сбой процедуры инициализации. в
Неизвестно в строке 0




Я уже решил начальную проблему PHP, не найдя мое расширение, так что это не проблема стиля пути.



Я думаю, что php4Delphi 7.2 может не поддерживать последнюю версию PHP 5.3.6. У кого-нибудь есть такая конфигурация, работающая на них?

752   3  

3 ответов:

PHP пытается загрузить модуль внутренне и терпит неудачу, вы правы. Проблема не в пути поиска, а в использовании не потокобезопасной версии php с php4delphi. Когда php загружает расширение, он получает список некоторых функций обратного вызова из библиотеки DLL расширения и использует его для связи с библиотекой dll. Список параметров функции обратного вызова для потокобезопасных и не потокобезопасных версий php отличается. php4delphi был сделан для потокобезопасной модели php. Вы можете прочитайте, в чем разница между версиями TS и NTS здесь: IIS Aid. В данном конкретном случае я бы рекомендовал изменить не потокобезопасный PHP на потокобезопасный PHP, если это возможно.

Если использование NTS PHP является требованием, то исходный код php4delphi должен быть адаптирован, и я думаю, что в этом случае требуется много изменений.

Я только что сделал тест php4delphi 7.2 с PHP 5.3.6, но потокобезопасная версия и расширение были загружены, как и ожидалось. Я думаю, что вы можете использовать версию NTS только в том случае, если вы запускаете свой скрипт с помощью php.exe из командной строки, а не при использовании IIS. В любом случае, я сделаю тест с версией NTS, а также сообщу вам о результате.

Мне кажется, что сам PHP (а не delphiphp) пытается загрузить модуль внутри, и это не удается.

Возможно, что он ищет библиотеки DLL в пути к loadlibrary() , но находит 64-разрядные библиотеки DLL вместо 32-разрядных библиотек DLL. Лучше всего сначала попробовать эту установку на 32-разрядной системе Windows.

P. s. 64-битная системная индикация, которую я получаю из " program files (x86)", очевидно,

Comments

    Ничего не найдено.