Компиляция общего php-модуля как dll (windows)

я пытаюсь скомпилировать общее расширение для php 8.3.6 x64 для Windows я в основном следовал этим инструкциям: https://ourcodeworld.com/articles/read/804/how-to-compile-a-php-extension-dll-file-in-windows-with-visual-studio#disqus_thread

Проблема: PHP Warning: PHP Startup: Unable to load dynamic library 'php_mailparse.dll' (tried: ./ext\php_mailparse.dll (Die angegebene Prozedur wurde nicht gefunden)) in Unknown on line 0

и что я сделал:

  • установлены базовые компоненты Visual Studio 2019
  • создать папку c:\php-sdk
  • извлек исходный код php из https://www.php.net/distributions/php-8.3.6.tar.gz в php-sdk
  • извлеченное содержимое https://pecl.php.net/get/mailparse-3.1.6.tgz в php-sdk/ext/mailparse Согласно инструкциям, я должен запустить buildconf и настроить, то, что он сказал, бинарные инструменты отсутствуют, поэтому
  • скачал https://github.com/php/php-sdk-binary-tools и распаковал в php-sdk/php-sdk-binary-tools-master
  • открыть командную строку или командную строку
  • перейти к php-sdk/php-sdk-binary-tools-master
  • запустите phpsdk-vs16-x64.bat
  • вернуться в php-sdk
  • беги configure --disable-all --enable-cli --enable-mbstring --enable-mailparse --disable-zts --with-all-shared выход:
-----------------------
| Extension  | Mode   |
-----------------------
...
| mailparse  | shared |
...
-----------------------


Enabled SAPI:
-------------
| Sapi Name |
-------------
| cli       |
-------------

-----------------------------------------
| Build type          | Release         |
| Thread Safety       | No              |
| Compiler            | Visual C++ 2019 |
| Target Architecture | x64             |
| Host Architecture   | x64             |
| Optimization        | PGO disabled    |
| Native intrinsics   | SSE2            |
| Static analyzer     | disabled        |
-----------------------------------------
  • запустить nmake

теперь в php-sdk\x64\Release я нашел php_mailparse.dll, [edit] и скопировал его в ext-папку предварительно скомпилированных php-бинарных файлов, [/edit] но эта dll выдает мне ошибку, написанную в начале... кто-нибудь знает, что я сделал не так?

теперь в php-sdk\x64\Release я нашел php_mailparse.dll <--> попробовал: ./ext\php_mailparse.dll. Это одна и та же папка?

shingo 20.04.2024 12:26

ах да, конечно, я скопировал его в папку ext php-бинарных файлов

mech 20.04.2024 14:33

./ext — это относительный путь. Можете ли вы подтвердить, что используете PHP в папке, где находится этот файл ext? Если вы не уверены, рекомендуется использовать абсолютный путь.

shingo 20.04.2024 16:09

уточню: в этой же папке находятся все остальные загруженные и рабочие расширения, там же не написано, что файл не найден, написано, что процедура не найдена

mech 20.04.2024 16:57

попробовал еще раз, следуя инструкциям на странице github.com/jhanley-com/php-ssh2-windows/blob/master/… безуспешно.

mech 20.04.2024 19:47

Я попробовал эту инструкцию: wiki.php.net/internals/windows/… и все получилось. Исходный код необходимо разместить в x64/pecl/.

shingo 21.04.2024 09:28

теперь это работает! сделал как вы сказали, но все равно не помогло. поскольку mailparse зависит от mbstring, я также скомпилировал mbstring=shared и заменил предварительно скомпилированный php_mbstring.dll (1554 КБ) на новый скомпилированный (1058 КБ), и теперь phpinfo показывает загруженный mailparse;)

mech 21.04.2024 11:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
152
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

благодаря @shingo и небольшому эксперименту у меня все получилось, как написал @shingo в своем комментарии компиляция общего php-модуля как dll (windows) я сделал следующее на основе инструкций https:// wiki.php.net/internals/windows/stepbystepbuild_sdk_2#building_pecl_extensions

я установил Visual Studio Community 2019 со следующими компонентами (я не знаю, какой из них действительно нужен, просто рад, что в целом он сработал ^^)

  • Разработка настольных компьютеров на C++
  • MSVC v142 — VS 2019 C++ — x64/x86Buildtools
  • Windows 10 SDK
  • Своевременный отладчик
  • C++-инструменты профилирования
  • C++-CMake-Tools для Windows
  • C++ адрессанитайзер

сейчас:

  • создать папку C:\php-sdk

  • извлеките php-источник в C:\php-sdk (теперь у меня был источник php в C:\php-sdk\php-8.3.6-src)

  • извлеките содержимое php-sdk-binary-tools-master.zip\php-sdk-binary-tools-master в C:\php-sdk (чтобы, например, phpsdk-vs16-x64.bat находился в C:\php- SDK)

  • зайдите в папку php-src (в моем случае C:\php-sdk\php-8.3.6-src) и создайте папку "pecl"

  • извлеките src расширения в C:\php-sdk\php-8.3.6-src\pecl (в моем случае mailparse, поэтому у меня была папка C:\php-sdk\php-8.3.6-src\pecl\pecl -mail-mailparse-master, но я переименовал его в C:\php-sdk\php-8.3.6-src\pecl\mailparse)

теперь откройте командную строку:

  • cd C:\php-sdk
  • phpsdk-vs16-x64.bat
  • cd php-8.3.6-src
  • buildconf
  • configure --disable-all --enable-cli --enable-mbstring=shared --enable-mailparse=shared --disable-zts (--disable-zts, потому что я компилирую для fastcgi под iis, также был необходим --enable-mbstring=shared, так как mailparse зависит от mbstring, без него он не работал)
  • nmake

теперь я скопировал php_mbstring.dll и php_mailparse.dll из C:\php-sdk\php-8.3.6-src\x64\Release в папку расширения моей ext-папки запускаемых предварительных php-бинарных файлов, ЗАМЕНЯЯ существующую php_mbstring. dll и теперь все работает ;)

Другие вопросы по теме