Написание 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. У кого-нибудь есть такая конфигурация, работающая на них?
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