Почему модуль PHP cURL не загружается на моем веб-сервере Windows/Apache?

Вопрос или проблема

Не уверен, подходит ли это для Stack Overflow или здесь.

У меня есть сервер Apache 2.4, работающий на ОС Windows Server 2019. Я установил PHP 8.1.29 с сайта Apache для Windows, и все остальные функции PHP, похоже, работают нормально.

Я не могу заставить работать cURL. Если я пытаюсь использовать какие-либо функции cURL в PHP, я получаю сообщения, которые предполагают, что функция не существует, что подразумевает, что cURL не загружен. Если я делаю тест phpinfo, чтобы открыть веб-страницу с информацией о PHP, я вижу, что у нее нет заголовка cURL, так что я знаю, что он не загружается.

Если я открою файл php.ini в C:\php\php.ini, я вижу, что расширение php_curl здесь указано и не закомментировано. Я вижу на странице PHPinfo, что это правильный файл php.ini, который используется Apache.

Если я загляну в журналы ошибок, я вижу следующую строчку, которая представляет интерес:

PHP Warning:  PHP Startup: Не удалось загрузить динамическую библиотеку 'C:\\php\\ext\\php_curl' (попытка: C:\\php\\ext\\php_curl (Указанная процедура не найдена), ext\\php_C:\\php\\ext\\php_curl.dll (Указанный модуль не найден)) в Неизвестно на строке 0

Указанный файл dll присутствует в C:\php\ext\

Раздел расширений файла php.ini выглядит следующим образом:

; Директория, в которой находятся загружаемые расширения (модули).
; https://php.net/extension-dir
;extension_dir = "./"
; На Windows:
extension_dir = "ext"

Что, я считаю, правильно.

Я пытался установить расширение curl с помощью следующей строки в файле php.ini:
extension=C:\php\ext\php_curl

Я пытался установить его следующим образом:
extension=curl

и перезапускал сервер после каждого изменения, но оно все равно не загружает его с той же ошибкой:

PHP Warning:  PHP Startup: Не удалось загрузить динамическую библиотеку 'curl' (попытка: ext\\curl (Указанный модуль не найден), ext\\php_curl.dll (Указанная процедура не найдена)) в Неизвестно на строке 0

Я пробовал скачать PHP 8.2 и взять файл dll curl и поместить его в то же место, на случай, если файл из 8.1.29 поврежден, но это тоже не сработало.

Я нашел эту тему на Stack Overflow:
https://stackoverflow.com/questions/12348/php-curl-on-windows-install-the-specified-module-could-not-be-found

И на основе этого я скопировал 3 файла libssl-* и 3 файла libcrypto-* из папки php в папку system32 и снова перезапустил apache, но все еще получаю ту же ошибку:

PHP Warning:  PHP Startup: Не удалось загрузить динамическую библиотеку 'curl' (попытка: ext\\curl (Указанный модуль не найден), ext\\php_curl.dll (Указанная процедура не найдена)) в Неизвестно на строке 0

Все это началось после того, как я обновил PHP с более ранней версии 8.1 для исправления опубликованного уязвимости безопасности, до этого оно работало нормально.

Правка для добавления: У меня уже была папка установки php в переменной окружения PATH, так что перемещение этих файлов не должно было быть необходимо.

Я только что обновил Apache с версии 2.4.58 до 2.4.62 (Windows), и теперь у меня возникла эта проблема. В Apache/bin есть
openssl.exe
libcrypto-3-x64.dll
libssl-3-x64.dll
и

apache\bin> openssl version
OpenSSL 3.1.7 3 Sep 2024 (Library: OpenSSL 3.1.7 3 Sep 2024)

Ответ или решение

Чтобы решить проблему с загрузкой модуля cURL в PHP на вашем сервере Windows с Apache, вам следует выполнить несколько шагов, чтобы убедиться, что cURL правильно настроен. Давайте разберёмся по порядку.

Проверка наличия необходимых файлов

  1. Проверьте наличие библиотек: Убедитесь, что в директории C:\php\ext\ действительно есть файлы php_curl.dll, а также libssl-3-x64.dll, libcrypto-3-x64.dll. Эти библиотеки необходимы для работы cURL.

  2. Совместимость версий: Убедитесь, что версия php_curl.dll, которую вы используете, совместима с вашей версией PHP и Apache. Например, если вы используете PHP 8.1.29, то убедитесь, что вы не скопировали библиотеки из более новой версии PHP. Это может вызвать конфликты.

Настройки php.ini

  1. Настройте php.ini:
    • Откройте файл конфигурации php.ini, который загружается вашим Apache (вы можете это подтвердить через PHPinfo).
    • Убедитесь, что строка extension_dir выглядит так:
      extension_dir = "C:\php\ext"
    • Убедитесь, что строка для загрузки cURL не закомментирована:
      extension=php_curl.dll

Обновление зависимостей OpenSSL

  1. Проверьте OpenSSL: Для работы cURL требуются файлы OpenSSL. Поскольку вы обновили Apache, обратите внимание на наличие следующих файлов в каталоге apache\bin:

    • libcrypto-3-x64.dll
    • libssl-3-x64.dll

    Поскольку вы упомянули, что у вас установлена версия OpenSSL 3.1.7, убедитесь, что совместимость между версиями OpenSSL и PHP соблюдена. В некоторых случаях может помочь копирование библиотек из папки PHP в папку apache\bin.

Правка системных переменных

  1. Проверьте PATH: Убедитесь, что путь к папке PHP включен в переменную окружения PATH. Это позволит системе найти необходимые динамические библиотеки.

Перезапуск Apache

  1. Перезапустите Apache: После внесения всех изменений обязательно перезапустите Apache, чтобы они вступили в силу. Возможно, стоит сначала остановить его, а затем запустить заново.

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

  1. Логи ошибок: Если проблема продолжает существовать, посмотрите логи ошибок Apache и PHP. Возможно, там будет более конкретная информация о том, что идет не так.

  2. Используйте правильную архитектуру: Убедитесь, что используете 64-битные версии PHP и Apache (или 32-битные), чтобы избежать конфликтов между архитектурами.

Заключение

Если после выполнения всех этих шагов cURL всё ещё не загружается, возможно, потребуется удалить версию PHP и установить её заново, убедившись, что используются все правильные зависимости и файлы. Иногда простая переустановка может помочь исправить недостающие или поврежденные файлы.

Надеюсь, эти рекомендации помогут вам справиться с проблемой. Если остались вопросы, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...