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

Во-первых, речь идет о php4Delphi, а не о RadPHP (ранее Delphi For 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: \ Windows \ Temp \ php-errors.log.

[15-Jun-2011 17:58:42] PHP Предупреждение: запуск PHP: невозможно загрузить динамическую библиотеку «C: \ Program Files (x86) \ PHP \ ext \ delphi_math.dll» – Инициализация динамической библиотеки ссылок (DLL) не удалось выполнить процедуру. в Unknown в строке 0

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

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

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-файлы в PATH для loadlibrary (), но находит 64-разрядные библиотеки DLL вместо 32-разрядных DLL. Сначала попробуйте эту настройку в 32-битной системе Windows.

Ps 64-битная системная индикация, которую я получаю из «программных файлов (x86)», очевидно