Apache curl не работает

Решение проблемы с работой модуля cURL на PHP 5.6.1, PHP 5.5.17 и выше (на Windows)

Те, кто использует cURL, после обновлений на 5.6.1, 5.5.17 столкнулись с тем, что модуль cURL перестал работать. Проблема с тех пор не исчезла. Даже в последней на сегодняшней момент версии PHP 5.6.4 эта проблема сохранилась.

Как узнать, работает ли у вас cURL?

Создайте php файл и скопируйте туда:

Откройте его с сервера. Если на выходе что-то вроде:

Значит с cURL всё в порядке, если вместо этого ошибка PHP, значит проблема существует.

Во-первых, конечно же проверьте файл php.ini, найдите там строчку

И убедитесь, что перед ней не стоит точка с запятой.

Если всё так, а cURL не работает, то можно провести ещё один тест, для подтверждения необычности ситуации. Создайте ещё один php файл с содержанием:

Через поиск в браузере найдите cURL, если совпадение всего одно, значит модуль cURL не загружен:

При этом и Apache и PHP работают как обычно.

  1. Способ первый (не кошерный). Если у вас PHP 5.6.*, то возьмите версию PHP 5.6.0, оттуда возьмите старый файл php_curl.dll и замените его вместо вашего нового из версии, например, PHP 5.6.4. Для тех, у кого PHP 5.5.17 и выше, нужно взять этот же файл из PHP 5.5.16 и также его заменить. Проблема здесь одна — найти эти старые версии. Можно, конечно, покавыряться в http://windows.php.net/downloads/snaps/php-5.6, но лично я там не нашёл того, что мне нужно. Да и само решение какое-то не совсем кошерное.
  2. Способ второй (очень быстрый, но тоже не кошерный). Из каталога PHP скопировать файл libssh2.dll в каталог Apache24bin и перезапустить Apache.
  3. Способ третий (кошерный — кошерные люди аплодируют стоя). Нужно добавить вашу PHP директорию в PATH. Как это сделать очень хорошо расписано в официальной документации.

Вуаля, секция cURL на месте.

Почему так? Откуда взялась эта проблема? Ответа на этот вопрос нет, хотя уже описан механизм её возникновения.

Проблема связана, вроде, с тем, что 5.6.1 должен был выпущен с обновлённым libcurl 7.38.0. Но это доподлинно не известно, авторы PHP кивают на Apache, мол это там какие-то баги.

Механизм возникновения проблемы: если в системную PATH не включён каталог PHP, то когда служба Apache запускается, она не способна найти новый dll (libssh2.dll), который является зависимостью для php_curl.

Читайте также:  Как настроить точку доступа репитером

Соответствующие баг репорты:

Fatal error: Call to undefined function curl_multi_init() in …

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

Кроме этого, гугление дало ещё несколько выводов:

В Интернете достаточно «инструкций для дибилов», в которых подробно, с картинками, рассказывают как раскомментировать строку extension=php_curl.dll в файле php.ini.

На официальном сайте PHP, в разделе по установке cURL, есть всего два предложения относительно системы Windows:

Для работы с этим модулем в Windows файлы libeay32.dll и ssleay32.dll должны существовать в системной переменной окружения PATH. Вам не требуется файл libcurl.dll с сайта cURL.

Я прочитал их десяток раз. Переключился на английский язык и прочитал ещё несколько раз на английском. С каждым разом всё больше убеждаясь, что эти два предложения написали животные, или кто-то просто попрыгал попой на клавиатуре — я не понимаю их смысла.

Ещё есть несколько каких-то сумасшедших советов и инструкций (некоторые я успел даже опробовать).

На сайте баг репортов ПХП я уже вплотную подобрался к разгадке, что нужно в системную переменную PATH включить каталог с PHP.

В общем, для тех, у кого проблема с cURL и кому нужно «в системную переменную PATH включить каталог с PHP», перейдите к уже названной выше инструкции http://php.net/manual/ru/faq.installation.php#faq.installation.addtopath. Там всё просто, а, главное, человеческим языком написано, что нужно сделать.

2 thoughts to “Решение проблемы с работой модуля cURL на PHP 5.6.1, PHP 5.5.17 и выше (на Windows)”

Способ второй (очень быстрый, но тоже не кошерный). Из каталога PHP скопировать файл libssh2.dll в каталог Apache24bin и перезапустить Apache.

Спасибо большое, второй способ очень быстро исправил проблему.

Источник

apache — CURL включен в php.ini, но все еще не работает

Я включил расширение CURL в он php.ini В этой папке я скопировал файлы Mllliple dll из папки PHP в папку Apache Bin и папку System 32, но cURL все еще не включен в моей системе.

Все решения, на которые я смотрел:

Я знаю это, потому что я все еще вижу следующую ошибку:

Fatal error: Call to undefined function curl_init() in C:\AMP\sites\ftp-crawl\index.php on line 55

Когда я бегу только phpinfo() , нет никаких опций cUrl. Единственное упоминание о CURL находится под module authors и его ценность cURL: Sterling Hughes

Я работаю на машине разработчика Windows 10 с установленными PHP, MySQL и Apache.

Что мне еще нужно сделать или проверить, чтобы включить скручивание?

Решение

У меня такая же проблема. Я исправляю замену php_curl.dll . Возможно повреждение файла.

В php.ini я настраиваю с extension=php_curl.dll ,

Больше не надо Call to undefined function curl_init() ошибки.

Читайте также:  Novo button menu не работает клавиатура

Другие решения

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

Итак, где большинство php.ini файлы просто имеют следующую строку кода:

Я изменил это, чтобы выглядеть так:

Я понятия не имею, почему PHP / Apache не мог показать ошибку, пока я extension=php_curl.dll в моем php.ini , По крайней мере, сказать что-то вроде dll missing или что-то подобное, но это решило мою проблему.

Я считаю, что вы отредактировали демо или неверный файл php.ini.
В вашем phpinfo вы найдете путь к используемому файлу php.ini. Это рядом с текстом: «Файл конфигурации». Проверьте этот файл и убедитесь, что установлена ​​следующая опция (по умолчанию она закомментирована точкой с запятой).

Если вы не можете найти эту строку, возможно, у вас другая версия Apache. В этом случае вы можете найти каталог с именем «mods-available», в котором находится расширение curl. Вам нужно переместить этот файл в папку «mods-enabled». Честно говоря, я думаю, что это относится только к средам Linux, не уверен насчет Windows.

Источник

apache не видит intl и curl

apache запущен ис под админа. В логах апача:

PHP Warning: PHP Startup: Unable to load dynamic library ‘curl’ (tried: C:\php\ext\curl (\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.), C:\php\ext\php_curl.dll (\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.)) in Unknown on line 0

PHP Warning: PHP Startup: Unable to load dynamic library ‘intl’ (tried: C:\php\ext\intl (\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.), C:\php\ext\php_intl.dll (\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.)) in Unknown on line 0

Переменные path прописаны, после комп был перезагружен — не помогло.

Источник

PHP CURL вдруг не работает без причины

В настоящее время я работаю над проектом, который выполняет ajax-вызов моего API на том же сервере. Все шло хорошо, пока несколько часов назад cURL внезапно перестал работать без причины , и это выдает мне следующую ошибку

Но это не имеет никакого смысла, потому что это работало ранее, и единственное, что я изменил, было что-то на экране входа в систему (только PHP) и часовой пояс на сервере по умолчанию на «Европа / Берлин» с

Я уже перезапустил apache2, перезагрузил сервер, проверил файл php.ini и мой phpinfo, все без ошибок и изменений, но curl просто не будет работать. Я пытался свернуть другие хосты и localhost, но ничего не работает. Я также проверил / var / mail / root, ошибок нет.

Немного информации на мой сервер

  • Debian 8
  • Сертификат SSL от Symantec
  • полный root-доступ без каких-либо ограничений

Это код cURL, который я использую

Как я уже сказал, он работал нормально и без проблем дольше 1 месяца. Это самая странная вещь, которую я когда-либо видел. Я надеюсь, что кто-нибудь может мне помочь. Если нет, есть ли хорошие альтернативы скручиванию? (POST — запросы)

3 ответа

Спасибо всем за помощь, но я нашел ошибку. Проблема заключалась в следующем:

curl не работал с протоколом https, потому что в папке с библиотеками была битая ссылка / файл. Если curl не работает для вас, проверьте с curl —version , если вы получаете следующую ошибку:

Читайте также:  После обновления imac не работает

Если да, перейдите на /usr/local/lib и удалите обе libcurl ссылки / файлы. Это решило проблему для меня. После этого просто перезапустите apache2, и он должен снова заработать.

Обратите внимание, что это решило проблему только для меня, и это не глобальная проблема. Так что будьте в курсе того, что вы удаляете на своем сервере. Всегда делайте резервную копию!

Я узнал, что по какой-то причине мой сервер обновился с PHP 7.3 до PHP 7.4. Я фактически понизил до 7.3, потому что тот, кто скомпилировал эту копию 7.4, испортил компиляцию до такой степени, что любому здравомыслящему человеку было бы неловко выходить на национальное телевидение без штанов. Перезагрузка сервера не требуется.

Я поймал проблему, потому что я реализовал обнаружение через function_exists() для некоторых важных функций PHP после того, как я обнаружил эту абсолютно ужасную копию PHP.

Поэтому убедитесь, что вы используете несколько версий PHP, чтобы ваш сервер не решил вслепую обновиться до более новой и неполной (скомпилированной) версии.

Одна вещь, которая может сделать проблему

curl_setopt($ch, CURLOPT_POST, count($params));

Попробуйте определить так:

curl_setopt($ch, CURLOPT_POST, true);

Вот одна настройка, которая прекрасно работает для меня:

Но обратите внимание: CURLOPT_HTTPHEADER в этом примере настроен для принятия JSON.

Также http_build_query может исправить некоторые проблемы с анализом в ваших данных. Не важно использовать, но может помочь.

Источник

Apache 2.4.23 PHP7.x Windows 10 x64 php_curl не работает

Я пытался обновить свой сервер до последних Apache 2.4.23 и PHP 7.1, но он не смог загрузить библиотеку php_curl, не знаю почему.

Я попробовал следующее

  1. Изменить путь расширения до полного пути, например d: \ webserver \ php \ ext
  2. Скопируйте php_curl.dll, libssh2.dll, libeay32.dll, ssleay32.dll в System32 , php / ext , apache / bin , php
  3. Добавлена ​​системная переменная php path
  4. Попробовали как PHP7, так и PHP7.1
  5. Все это x64, и все остальные расширения успешно загружены и работают на сервере, но только php_curl не работает
  6. uncommented extension в php.ini
  • Apache 2.4.23 x64
  • PHP7 и также попробовал PHP7.1 (Thread Safe) x64
  • Windows 10 x64

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

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

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

Источник

Оцените статью