Решение проблемы загрузки модулей PHP в Apache

    В конфигурационном файле php.ini активирован ряд модулей, однако некоторые из них не загружаются при работе через веб-сервер Apache, хотя корректно работают в командной строке (CLI).

    Конфигурация модулей в php.ini

    В файле настроек присутствуют следующие директивы для подключения расширений:

    • extension=c:\Apache24\php8\ext\php_bz2.dll - активен.
    • extension=curl - попытка загрузки без полного пути (предыдущая строка с полным путём закомментирована, так как не работает).
    • extension=ftp - аналогичная ситуация с модулем 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_pdo_mysql.dll - активен.

    Суть проблемы

    Модули cURL, FTP и OpenSSL не загружаются в среде веб-сервера Apache. Функция phpinfo(), запущенная через браузер, не отображает эти расширения. При этом выполнение команды php -i в командной строке показывает, что все модули загружены корректно.

    Анализ логов Apache

    В журналах сервера присутствуют предупреждения о невозможности загрузки динамических библиотек. Ошибки имеют следующий вид (на примере cURL):

    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_ftp.dll и php_openssl.dll. Ключевые моменты:

    • PHP пытается найти файл по указанному полному пути, но сообщает, что модуль не найден.
    • Вторая попытка поиска содержит некорректно сформированный путь с дублированием, что указывает на возможную проблему в конфигурационных директивах.

    Диагностика и рекомендуемые шаги

    Поскольку стандартные рекомендации (проверка путей, прав доступа, перезагрузка Apache) не принесли результата, предлагается следующий план действий:

    1. Проверка использования разных файлов php.ini. Убедитесь, что Apache использует тот же файл php.ini, что и CLI. Для этого создайте скрипт с <?php phpinfo(); ?> и найдите параметр Loaded Configuration File. Сравните путь с тем, что возвращает команда php --ini в терминале.
    2. Проверка переменной окружения extension_dir. В том же выводе phpinfo() найдите значение extension_dir. Убедитесь, что оно корректно указывает на папку c:\Apache24\php8\ext\. При несовпадении исправьте директиву extension_dir в php.ini, используемом Apache.
    3. Проверка зависимостей (DLL-файлов). Модули cURL, FTP и OpenSSL могут иметь внешние зависимости от библиотек (например, libeay32.dll, ssleay32.dll). Убедитесь, что эти файлы находятся в системном пути (например, в каталоге c:\Apache24\php8\) или в папке, указанной в переменной окружения PATH системы.
    4. Совместимость версий PHP и Apache. Убедитесь, что используется правильная разрядность (x86/x64): все компоненты (PHP, Apache, модули) должны быть собраны для одной архитектуры.
    5. Прямое указание путей в php.ini. Попробуйте раскомментировать строки с полными путями, но исправить их на корректный формат (например, extension=c:/Apache24/php8/ext/php_curl.dll или extension=c:\Apache24\php8\ext\php_curl.dll). Удалите или закомментируйте строки вида extension=curl.
    6. Анализ прав доступа. Убедитесь, что учётная запись, от имени которой запущена служба Apache (например, SYSTEM или специальный пользователь), имеет права на чтение и выполнение DLL-файлов в каталоге c:\Apache24\php8\ext\.
    7. Переустановка модулей. Попробуйте заменить проблемные DLL-файлы их оригинальными копиями из официального дистрибутива PHP, совместимого с вашей версией.

    Наиболее вероятными причинами являются использование разными средами разных файлов php.ini или отсутствие необходимых для модулей системных библиотек в пути, доступном для Apache.