Только для моего будущего я, если не больше. Это с 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
ошибках в своих журналах.