Запуск PHP: невозможно загрузить динамическую библиотеку, Windows, Apache 2.2, php 5.2.11 - PullRequest
7 голосов
/ 27 ноября 2009

Это становится очень неприятной проблемой. Я пытаюсь сделать чистую установку Apache 2.2 и PHP 5.2.11. Кажется, все настроено правильно, но модули php не запускаются ...

PHP Warning:  PHP Startup: Unable to load dynamic library '.;C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/php_mcrypt.dll' - The specified module could not be found.\r\n in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '.;C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/php_mysql.dll' - The specified module could not be found.\r\n in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '.;C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/php_openssl.dll' - The specified module could not be found.\r\n in Unknown on line 0

в php.ini

include_path = ".;C:\Program Files (x86)\Apache Software Foundation\Apache2.2\php"
extension_dir = ".;C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/"

Все файлы есть ... .dll файлы, такие как ssleay32.dll, libmcrypt.dll, libmysql.dll, libeay32.dll все установлены в ...

C: / Program Files (x86) / Apache Software Foundation / Apache2.2 / php /

Я также включил их в C: \ Windows \ System32

и даже добавил C: / Program Files (x86) / Apache Software Foundation / Apache2.2 / php / в путь Windows.

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

Ответы [ 4 ]

10 голосов
/ 27 ноября 2009

Попробуйте это:

extension_dir = "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/"

без запуска с .;

2 голосов
/ 20 сентября 2016

Только для моего будущего я, если не больше. Это с PHP 5.2.13, работающим в Windows на IIS 8.

Я получил следующую ошибку:

Предупреждение PHP: Запуск PHP: не удается загрузить динамическую библиотеку «C: \ Program Files (x86) \ PHP \ ext \ php_openssl.dll» - указанный модуль не найден.

Из phpinfo() загруженный файл php.ini был C:\Program Files (x86)\PHP\php.ini.

Каталог расширений:

extension_dir ="C:\Program Files (x86)\PHP\ext"

Это были две последние строки файла php.ini:

[PHP_SQLSRV]
extension=php_sqlsrv_52_nts_vc6.dll
[PHP_OPENSSL]
extension=php_openssl.dll

Файлы php_openssl.dll и php_sqlsrv_52_nts_vc6.dll находятся в каталоге ext. php_openssl.dll не поврежден (это тот же размер файла, что и на другом компьютере, который работает).

PHP найдет dll sqlsrv, но не dll openssl. Понятия не имею почему. Никакие перезапуски IIS ничего не сделали.

Решением до тех пор, пока я не узнал лучше, было установить расширение openssl.dll с помощью установщика Windows PHP. Вы можете перезапустить установщик и выбрать «Изменить», что позволит вам добавлять или удалять библиотеки. Сейчас я не вижу никакой разницы в файле или в файле php.ini, но теперь файл загружается.

Я подозреваю, что на самом деле моя проблема была похожа на этот комментарий об установке OpenSSL в Windows :

В этот момент, когда вы запускаете Apache, он пытается загрузить php_openssl.dll, но если ваши настройки похожи на мои, вы увидите ошибку. Я предпочитаю запускать Apache вручную, и в диалоговом окне появляется ошибка: «Порядковый номер 4114 не может быть расположен в библиотеке динамических ссылок LIBEAY32.dll». (Я не уверен, что вы получите это сообщение, если запустите Apache как сервис). Журнал Apache также содержит сообщение об ошибке, в котором говорится, что php_openssl.dll не может быть загружен, хотя это сообщение не называет libeay32.dll. Добро пожаловать в DLL Hell.

Libeay32.dll входит в картину, потому что php_openssl.dll зависит от него (а также от ssleay32.dll). Что я думаю, так это то, что Apache сначала пытается программно загрузить php_openssl.dll по пути, указанному ключом extension_dir. Но затем загрузка так называемых зависимых DLL остается за механизмом Windows по умолчанию. Если Windows находит несовместимую версию зависимой библиотеки DLL, вы получаете сообщение об ошибке.

Я заметил ошибки о ssleay32.dll при попытке запустить php -i из командной строки. Я просто предположил, что его не было в окружающей среде. IIS не упоминал ни о каких ssleay32.dll ошибках в своих журналах.

1 голос
/ 06 мая 2017

Вы просто раскомментируете extension_dir в php.ini

enter image description here

0 голосов
/ 15 января 2018

Произошли те же ошибки, но вместо копирования файлов добавили папку php в системный путь и перезагрузили сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...