PHP не может загрузить расширение php_curl.dll

После вчерашнего моего сообщения (Включение cURL с PHP)

Проблема в том, что PHP не может загрузить php_curl.dll. Я пробовал несколько шагов, включая uncommenting extension=php_curl.dll, убедившись, что зависимости libeay32.dll и ssleay32.dll eixst в пути, перезагрузка php_curl.dll, замена старого и, наконец, копирование файла в мою папку System32.

Я использую Apache 2.2 и PHP 5.4.14. Я установил оба их отдельных пакета; Я не использую XAMP или WAMP. Я использую 64-разрядную версию Windows 7.

Любая помощь вообще будет оценена.

Ответ 1

Для php_curl.dll загрузки php_curl.dll должны быть доступны пути libeay32.dll и ssleay32.dll.

Но копирование их в Apache ServerRoot, Apache \bin\, Window \System32\ или, что еще хуже, в основной каталог Windows является плохим хаком и может даже не работать с более новыми версиями PHP.

Правильный способ сделать это - добавить путь PHP в переменную Windows Path. В Control Panel → System нажмите Дополнительные параметры системы и используйте кнопку Переменные среды. В системных переменных вы найдете переменную Path. Отредактируйте его и добавьте; C:\PHP prepend C:\PHP; к нему - или каков путь к вашей папке PHP. Затем полностью остановите Apache и запустите его снова (простой перезагрузки может быть недостаточно).

Обновление 2017-05:
Я изменил приведенные выше инструкции, добавив переменную Path к пути PHP вместо добавления к нему. Это гарантирует, что библиотеки DLL в пути PHP используются, а не какие-либо другие (устаревшие) версии в других путях системы.

Обновление 2018-04:
Если вы уже выбрали неправильный путь и скопировали любую из DLL-библиотек PHP в пути Apache или Windows, я настоятельно рекомендую вам удалить их снова! Если вы этого не сделаете, у вас могут возникнуть проблемы, когда вы позже попытаетесь обновить PHP. Если новая версия PHP приносит новые версии этих библиотек DLL, но ваши старые библиотеки DLL по-прежнему сохраняются в путях системы или веб-сервера, эти старые библиотеки DLL могут быть найдены первыми. Это наверняка предотвратит запуск интерпретатора PHP. Такие ошибки могут быть очень трудно понять и устранить. Поэтому лучше очистить сейчас и удалить любые из упомянутых DLL из путей Windows и Apache, если вы их там скопировали.
(Спасибо @EdmundTam и @WasimA. За то, что указали на эту проблему в комментариях!)

Ответ 2

В версии PHP 5.6.x Вы должны сделать следующее:

Переместитесь в Windows\system32 папку DLL из папки php:

libssh2.dll, ssleay32.dll, libeay32.dll и php_curl.dll из php ext папки

Переместитесь в папку Apache24\bin из папки php:

libssh2.dll

Кроме того, не забудьте раскомментировать extension=php_curl.dll в php.ini

Ответ 3

WINDOWS Apache 2.4.x + PHP 7.0.x РЕШЕНИЕ ЗДЕСЬ:

Поместите файлы libeay32.dll, libssh2.dll, ssleay32.dll в каталог dir, указанный в директиве ServerDoot httpd.conf. Эти DLL файлы можно найти в папке php root.

Причины:

Проблема в том, что php_curl.dll требует доступа к следующим библиотекам при загрузке: libeay32.dll, libssh2.dll, ssleay32.dll, и это не имеет смысла, если вы помещаете их в. /php/ext dir или если вы добавляете расширения php в корневом каталоге php.

Конечно, вы можете поместить их в c:\Windows или в какую-либо глобальную папку, определенную в PATH, но если вы этого не хотите, и хотите, чтобы ваша установка apache + php была переносимой:

Путь, указанный в ServerRoot в httpd.conf, рассматривается как домашний путь для php. Поведение похоже на ситуацию, когда вы включаете файл. /path/to/some.php в./index.php и домашний путь для файла some.php./Dir, где находится index.php.

В шортах просто поместите эти три библиотеки DLL в каталог, указанный в httpd.conf директиве ServerRoot, и php_curl.dll не перестанет загружаться снова.

Ответ 4

Загружается .dll, поэтому ваша ОС должна быть окнами.

Сначала проверьте, какой файл php.ini вы используете, запустив phpinfo()

Затем проверьте, где находится ваша папка с расширениями, указав в этом файле атрибут extension_dir.

Затем убедитесь, что php_curl.dll присутствует в этой папке. Если не скопировать его.

Перезагрузите apache и проверьте, не работает ли он.

Поскольку вы устанавливали пакеты по отдельности, также выполните следующие действия:

Скопируйте файл dll с php_installation_folder/extensions на apache_installation_folder/bin

Ответ 5

Удостоверьтесь, что ваши apache SSH dll загрузились правильно. На новой установке мне пришлось загрузить и загрузить в мой каталог bin Apache следующую DLL "libssh2.dll"

После загрузки ssl dll cURL смог загрузить без проблем.

Вы можете скачать его по ссылке ниже:

http://windows.php.net/downloads/pecl/releases/ssh2/0.12/

Ответ 6

Решение:

Step1: Uncomment the php_curl.dll from php.ini

Step2: Copy the following three files from php installed directory.i.e "C:\\php7".

libeay32.dll,
libssh2.dll,
ssleay32.dll

Step3: Paste the files under two place

httpd.conf ServerRoot directive. i.e "C\Apache24"
apache bin directory. i.e "C\Apache24\bin"

Step4: Restart apache.

Это все. Я решаю проблему таким образом. Надеюсь, это сработает для вас.

Решение приведено здесь. https://abcofcomputing.blogspot.com/2017/06/php7-unable-to-load-phpcurldll.html

Ответ 7

Перепробовав все здесь, мне пришлось просто обновить Apache до более новой версии, чтобы заставить работать расширение curl.

Я обновлял PHP с 7.0.2 до 7.1.15, после чего curl не работал. Единственный способ исправить это - обновить Apache (версия 2.4.18) до последней версии 2.4.29.

Не нужно было копировать какие-либо файлы lib/ssleay dll в Apache или Windows - возможно, потому что у меня уже есть папка PHP в моем системном пути.

Работает под управлением Windows 10, 64-битная, потокобезопасная версия, VC14.

Ответ 8

Вставить в файл httpd.conf

LoadFile "D:/DevKit/PHP7.1/libeay32.dll"
LoadFile "D:/DevKit/PHP7.1/libssh2.dll"
LoadFile "D:/DevKit/PHP7.1/ssleay32.dll"

Ответ 9

Обычно это ошибка несоответствия версий OpenSSL между Apache и PHP. В случае, если Apache загружает PHP как модуль DSO, будут использоваться его собственные версии OpenSSL (dll и libs). Таким образом, если расширение PHP требует более новой версии, оно может не найти соответствующий интерфейс внутри DLL-библиотеки, загруженной Apache, и работать не будет.

Поскольку для загрузки требуется расширение PHP, необходимо, чтобы соответствующие файлы DLL были как минимум той версией, которую запрашивает модуль PHP. Предположим, что вы используете последние сборки как для Apache, так и для PHP, и обе они были собраны с одной и той же версией MVC, вы можете скопировать следующие файлы:

  • libcrypto-1_1.dll
  • libcrypto-1_1-x64.dll
  • libcurl.dll
  • libsasl.dll
  • libssh2.dll
  • libssl-1_1.dll
  • libssl-1_1-x64.dll
  • nghttp2.dll
  • libeay32.dll (если есть в вашем дистрибутиве PHP)
  • ssleay32.dll (если есть в вашем дистрибутиве PHP)

из корневой папки PHP в папку Apache2/bin, если вы уверены, что сборка PHP новее, чем сборка Apache.

В противном случае вы можете скопировать те же файлы из Apache BIN в корень PHP.

В любом случае, сделайте резервную копию содержимого папок APache и PHP заранее.

Добавление пути PHP в качестве переменной среды даст этому пути приоритет для загрузки соответствующих DLL и может решить проблему. Однако вы теряете в переносимости сервера. Кроме того, если вы также добавили Apache PATH в качестве переменной и версии OpenSSL сильно различаются (вплоть до загрузки разных связанных DLL файлов), может произойти много дерьма.

Ответ 10

Вы проверили, что 'extension_dir' в вашем php.ini имеет правильное значение и указывает на правильный каталог?

Ответ 11

Я столкнулся с той же проблемой раньше. Я разрешил это путем добавления php-каталога в переменные системной среды Windows --- Путь.

Ответ 12

Я получил эту ошибку, потому что, по крайней мере, в моей системе, если extension_dir в php.ini задан относительный путь, он воспринимается как относительный к корневому каталогу Apache, поэтому, чтобы заставить его указать на правильный каталог Мне пришлось использовать абсолютный путь: "C:\Program Files (x86)\PHP\ext". (Это был PHP 5.5.31 и Apache 2.4.23 в Windows 10, установка extension_dir to ext работала отлично с той же настройкой в ​​Windows 7. Сначала я начал работать, установив каталог ext в папку Apache с необходимыми DLL, затем выяснил, что происходит.)

Также необходимо правильно установить PATH или убедиться, что упомянутые выше DLL (libeay32.dll, libssh2.dll и ssleay32.dll) находятся в каталоге bin Apache (или, скорее всего, в одном из упоминаний о других местах), Тот факт, что я получил такое же сообщение об ошибке, что Apache не смог найти lib_curl.dll, так как для него не было возможности найти libssh2.dll, не было легче понять.

Ответ 13

Добавьте свой путь к папке php в System PATH, и все должно работать нормально. Он также исправит некоторые другие расширения, которые были сломаны.

Ответ 14

Здравствуйте, у меня возникла эта проблема с PHP 7.3.5. У меня есть c:\php в системе и пользовательский путь.

Дело в том, что эти 3 DLL (libeay32.dll, libssh2.dll и ssleay32.dll) больше не являются частью пакета PHP, начиная с 7.3.x.

Что мне здесь не хватает? Спасибо за любой совет!