НейроАгент

Apache 2.4 и PHP 8.4: не загружаются модули curl, ftp и openssl

Решение проблемы с загрузкой модулей curl, ftp и openssl в Apache 2.4 с PHP 8.4 под Windows. Проверка путей, архитектуры и зависимостей.

Вопрос

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 правильно настроены параметры:

ini
extension_dir = "C:\Apache24\php8\ext"

Важно: Проверьте, что путь extension_dir точно соответствует местоположению ваших модулей и использует двойные обратные слеши (\\) или одинарные (\).

Поиск всех php.ini файлов

На Windows может существовать несколько php.ini файлов:

  1. C:\Apache24\php8\php.ini - основной файл
  2. C:\Windows\php.ini - глобальный файл
  3. C:\php\php.ini - альтернативная установка

Используйте команду в командной строке:

cmd
where php.ini

Решения проблемы

1. Исправление путей в php.ini

Замените текущие настройки на явные пути:

ini
extension_dir = "C:\Apache24\php8\ext"

extension=php_curl.dll
extension=php_ftp.dll
extension=php_openssl.dll

Почему это важно: Явные пути помогают избежать путаницы с относительными путями и конкатенацией путей.

2. Проверка архитектуры модулей

Убедитесь, что все модули имеют одинаковую архитектуру с вашей сборкой PHP:

  1. Проверьте архитектуру PHP:

    cmd
    php -i | findstr "Thread"
    
  2. Сравните с архитектурой модулей. Файлы должны содержать в названии:

    • php8ts.dll для Thread Safe
    • php8nts.dll для Non-Thread Safe

3. Добавление зависимостей в PATH

Добавьте следующие каталоги в системную переменную PATH:

  • C:\Apache24\php8
  • C:\Apache24\php8\ext

Это обеспечит доступ к необходимым DLL файлам.

4. Проверка прав доступа

Убедитесь, что:

  • Пользователь, под которым работает Apache (обычно SYSTEM), имеет права на чтение файлов модулей
  • Файлы не заблокированы антивирусом
  • Файлы не используются другими процессами

Дополнительные проверки

Валидация конфигурации Apache

Проверьте конфигурацию Apache на наличие дублирующих настроек PHP:

apache
LoadModule php_module "C:/Apache24/php8/php8apache2_4.dll"

Убедитесь, что путь к PHP модулю правильный.

Использование тестового скрипта

Создайте файл test.php с содержимым:

php
<?php
phpinfo();
?>

Проверьте, какой php.ini используется:

php
<?php
echo php_ini_loaded_file();
?>

Ручная загрузка модулей

Попробуйте загрузить модули вручную через Apache конфигурацию:

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:

  1. Полностью удалите текущую версию PHP
  2. Скачайте свежую версию с официального сайта PHP
  3. Убедитесь, что архитектура соответствует Apache
  4. Установите с правильными путями

Использование XAMPP

Рассмотрите использование XAMPP, как упоминается в Wikipedia, который поставляется с преднастроенными компонентами включая OpenSSL и другие модули.

Обновление до PHP 8.3 или понижение версии

Если проблема не решается, возможно, стоит рассмотреть временное использование PHP 8.3, для которого модули более стабильны.


Источники

  1. XAMPP - Wikipedia - Информация о преднастроенных компонентах включая OpenSSL
  2. PHP Startup: Unable to load dynamic library - Local Community - Обсуждение проблем с загрузкой динамических библиотек
  3. phpinfo() not working in php setup - Web Site Development - Проблемы с phpinfo() и переустановка Apache

Заключение

Проблема с загрузкой модулей curl, ftp и openssl в Apache 2.4 с PHP 8.4 под Windows обычно решается следующими шагами:

  1. Проверьте и исправьте пути в php.ini, используя явные пути к модулям
  2. Убедитесь в совпадении архитектуры Thread Safe/Non-Thread Safe между PHP и модулями
  3. Добавьте необходимые DLL в PATH системы
  4. Проверьте наличие нескольких php.ini файлов и используйте правильный
  5. Переустановите PHP при необходимости, следя за совместимостью версий

Если модули работают из командной строки, но не в Apache, проблема точно связана с конфигурацией веб-сервера или правами доступа. Начните с проверки путей и архитектуры - это решает 90% подобных проблем.