я пытаюсь скомпилировать общее расширение для 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
и что я сделал:
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 |
-----------------------------------------
теперь в php-sdk\x64\Release я нашел php_mailparse.dll, [edit] и скопировал его в ext-папку предварительно скомпилированных php-бинарных файлов, [/edit] но эта dll выдает мне ошибку, написанную в начале... кто-нибудь знает, что я сделал не так?
ах да, конечно, я скопировал его в папку ext php-бинарных файлов
./ext — это относительный путь. Можете ли вы подтвердить, что используете PHP в папке, где находится этот файл ext? Если вы не уверены, рекомендуется использовать абсолютный путь.
уточню: в этой же папке находятся все остальные загруженные и рабочие расширения, там же не написано, что файл не найден, написано, что процедура не найдена
попробовал еще раз, следуя инструкциям на странице github.com/jhanley-com/php-ssh2-windows/blob/master/… безуспешно.
Я попробовал эту инструкцию: wiki.php.net/internals/windows/… и все получилось. Исходный код необходимо разместить в x64/pecl/
.
теперь это работает! сделал как вы сказали, но все равно не помогло. поскольку mailparse зависит от mbstring, я также скомпилировал mbstring=shared и заменил предварительно скомпилированный php_mbstring.dll (1554 КБ) на новый скомпилированный (1058 КБ), и теперь phpinfo показывает загруженный mailparse;)
благодаря @shingo и небольшому эксперименту у меня все получилось, как написал @shingo в своем комментарии компиляция общего php-модуля как dll (windows) я сделал следующее на основе инструкций https:// wiki.php.net/internals/windows/stepbystepbuild_sdk_2#building_pecl_extensions
я установил Visual Studio Community 2019 со следующими компонентами (я не знаю, какой из них действительно нужен, просто рад, что в целом он сработал ^^)
- 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 и теперь все работает ;)
теперь в php-sdk\x64\Release я нашел php_mailparse.dll <--> попробовал: ./ext\php_mailparse.dll. Это одна и та же папка?