Написание расширений PHP с использованием Delphi 2010 и php4Delphi - PullRequest
5 голосов
/ 15 июня 2011

Во-первых, это примерно 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 июня 2011 17:58:42] Предупреждение PHP: Запуск PHP: невозможно загрузить динамический библиотека 'C: \ Program Files (x86) \ PHP \ ext \ delphi_math.dll '- Библиотека динамических ссылок (DLL) Не удалось выполнить процедуру инициализации. в Неизвестный в строке 0

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

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

Ответы [ 3 ]

6 голосов
/ 15 июня 2011

PHP пытается загрузить модуль изнутри и терпит неудачу, вы правы.

Проблема не в пути поиска, а в использовании не поточно-ориентированной версии php с php4delphi. Когда php загружает расширение, он получает список некоторых функций обратного вызова от расширения dll и использует его для связи с dll. Список параметров функции обратного вызова для многопоточных и небезопасных версий php отличается.

php4delphi был сделан для поточно-безопасной модели php. Вы можете прочитать, в чем разница между версиями TS и NTS: IIS Aid . В этом конкретном случае я бы порекомендовал изменить не потокобезопасный PHP на PHP, если это возможно.

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

2 голосов
/ 15 июня 2011

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

0 голосов
/ 15 июня 2011

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

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

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

...