Apache 2.4 и PHP 8.4 под Windows: почему не загружаются модули curl, ftp и openssl?
В php.ini подключены несколько модулей:
extension=c:\Apache24\php8\ext\php_bz2.dll
;extension=c:\Apache24\php8\ext\php_curl.dll ****так тоже не работает
extension=curl
;extension=c:\Apache24\php8\ext\php_ftp.dll ****так тоже не работает
extension=ftp
extension=c:\Apache24\php8\ext\php_fileinfo.dll
extension=c:\Apache24\php8\ext\php_gd.dll
extension=c:\Apache24\php8\ext\php_gettext.dll
extension=c:\Apache24\php8\ext\php_mbstring.dll
extension=openssl
;extension=c:\Apache24\php8\ext\php_openssl.dll ****так тоже не работает
extension=c:\Apache24\php8\ext\php_pdo_mysql.dll
Модули curl, ftp и openssl не загружаются на веб-сервере (phpinfo() их не показывает), но работают при запуске из командной строки (php -i показывает их загрузку).
В логах Apache есть предупреждения:
PHP Warning: PHP Startup: Unable to load dynamic library ‘C:\Apache24\php8\ext\php_curl.dll’ (tried: C:\Apache24\php8\ext\php_curl.dll (Не найден указанный модуль), C:\Apache24\php\ext\php_C:\Apache24\php8\ext\php_curl.dll.dll (Не найден указанный модуль)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘c:\Apache24\php8\ext\php_ftp.dll’ (tried: c:\Apache24\php8\ext\php_ftp.dll (Не найден указанный модуль), C:\Apache24\php\ext\php_c:\Apache24\php8\ext\php_ftp.dll.dll (Не найден указанный модуль)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘c:\Apache24\php8\ext\php_openssl.dll’ (tried: c:\Apache24\php8\ext\php_openssl.dll (Не найден указанный модуль), C:\Apache24\php\ext\php_c:\Apache24\php8\ext\php_openssl.dll.dll (Не найден указанный модуль)) in Unknown on line 0
Все стандартные рекомендации уже перепробованы. Что еще можно попробовать для решения проблемы с загрузкой модулей curl, ftp и openssl в Apache с PHP 8.4 под Windows?
Основная проблема с загрузкой модулей curl, ftp и openssl в Apache 2.4 с PHP 8.4 под Windows связана с конфликтом путей и, возможно, несоответствием архитектуры модулей. Ошибки в логах показывают странное конкатенацию путей, что указывает на неправильную настройку extension_dir или проблемы с путями в php.ini.
Содержание
- Основные причины проблемы
- Диагностика конфигурации
- Решения проблемы
- Дополнительные проверки
- Альтернативные подходы
Основные причины проблемы
Судя по ошибкам в логах Apache, есть несколько ключевых проблем:
Некорректная настройка extension_dir
Ошибка C:\Apache24\php\ext\\php_C:\Apache24\php8\ext\php_curl.dll.dll показывает, что происходит странное слияние путей. Это происходит, когда:
- extension_dir в php.ini настроен неправильно
- Есть несколько php.ini файлов
- Apache ищет модули в неправильном каталоге
Несоответствие архитектуры модулей
PHP 8.4 имеет две версии сборок:
- Thread Safe (TS) - для Apache с модульной версией PHP
- Non-Thread Safe (NTS) - для FastCGI
Если вы пытаетесь загрузить модуль, собранный для другой архитектуры, произойдет ошибка загрузки динамической библиотеки.
Отсутствие зависимостей
Модули curl и openssl требуютpresence определенных DLL в системе PATH:
- libcurl.dll для модуля curl
- libeay32.dll или libssl.dll для модуля openssl
- ssleay32.dll для старых версий
Диагностика конфигурации
Проверка php.ini
Убедитесь, что в вашем php.ini правильно настроены параметры:
extension_dir = "C:\Apache24\php8\ext"
Важно: Проверьте, что путь extension_dir точно соответствует местоположению ваших модулей и использует двойные обратные слеши (\\) или одинарные (\).
Поиск всех php.ini файлов
На Windows может существовать несколько php.ini файлов:
C:\Apache24\php8\php.ini- основной файлC:\Windows\php.ini- глобальный файлC:\php\php.ini- альтернативная установка
Используйте команду в командной строке:
where php.ini
Решения проблемы
1. Исправление путей в php.ini
Замените текущие настройки на явные пути:
extension_dir = "C:\Apache24\php8\ext"
extension=php_curl.dll
extension=php_ftp.dll
extension=php_openssl.dll
Почему это важно: Явные пути помогают избежать путаницы с относительными путями и конкатенацией путей.
2. Проверка архитектуры модулей
Убедитесь, что все модули имеют одинаковую архитектуру с вашей сборкой PHP:
-
Проверьте архитектуру PHP:
cmdphp -i | findstr "Thread" -
Сравните с архитектурой модулей. Файлы должны содержать в названии:
- php8ts.dll для Thread Safe
- php8nts.dll для Non-Thread Safe
3. Добавление зависимостей в PATH
Добавьте следующие каталоги в системную переменную PATH:
C:\Apache24\php8C:\Apache24\php8\ext
Это обеспечит доступ к необходимым DLL файлам.
4. Проверка прав доступа
Убедитесь, что:
- Пользователь, под которым работает Apache (обычно SYSTEM), имеет права на чтение файлов модулей
- Файлы не заблокированы антивирусом
- Файлы не используются другими процессами
Дополнительные проверки
Валидация конфигурации Apache
Проверьте конфигурацию Apache на наличие дублирующих настроек PHP:
LoadModule php_module "C:/Apache24/php8/php8apache2_4.dll"
Убедитесь, что путь к PHP модулю правильный.
Использование тестового скрипта
Создайте файл test.php с содержимым:
<?php
phpinfo();
?>
Проверьте, какой php.ini используется:
<?php
echo php_ini_loaded_file();
?>
Ручная загрузка модулей
Попробуйте загрузить модули вручную через Apache конфигурацию:
<IfModule php_module>
LoadFile "C:/Apache24/php8/php8ts.dll"
LoadFile "C:/Apache24/php8/ext/php_curl.dll"
LoadFile "C:/Apache24/php8/ext/php_openssl.dll"
</IfModule>
Альтернативные подходы
Переустановка PHP
Если ничего не помогает, выполните чистую переустановку PHP:
- Полностью удалите текущую версию PHP
- Скачайте свежую версию с официального сайта PHP
- Убедитесь, что архитектура соответствует Apache
- Установите с правильными путями
Использование XAMPP
Рассмотрите использование XAMPP, как упоминается в Wikipedia, который поставляется с преднастроенными компонентами включая OpenSSL и другие модули.
Обновление до PHP 8.3 или понижение версии
Если проблема не решается, возможно, стоит рассмотреть временное использование PHP 8.3, для которого модули более стабильны.
Источники
- XAMPP - Wikipedia - Информация о преднастроенных компонентах включая OpenSSL
- PHP Startup: Unable to load dynamic library - Local Community - Обсуждение проблем с загрузкой динамических библиотек
- phpinfo() not working in php setup - Web Site Development - Проблемы с phpinfo() и переустановка Apache
Заключение
Проблема с загрузкой модулей curl, ftp и openssl в Apache 2.4 с PHP 8.4 под Windows обычно решается следующими шагами:
- Проверьте и исправьте пути в php.ini, используя явные пути к модулям
- Убедитесь в совпадении архитектуры Thread Safe/Non-Thread Safe между PHP и модулями
- Добавьте необходимые DLL в PATH системы
- Проверьте наличие нескольких php.ini файлов и используйте правильный
- Переустановите PHP при необходимости, следя за совместимостью версий
Если модули работают из командной строки, но не в Apache, проблема точно связана с конфигурацией веб-сервера или правами доступа. Начните с проверки путей и архитектуры - это решает 90% подобных проблем.