Php curl windows x64

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

The Codeby — одна из сильнейших Red Team в RU сегменте. Команда профессионалов, специализирующаяся на аудите информационных систем и тестировании на проникновение.

Мы предлагаем: Аудит веб-сайта компании, Аудит внешнего периметра, Аудит веб-приложения, Аудит внутренней корпоративной сети, Проверка ИБ-грамотности сотрудников, Анализ кода ПО, Аудит Wi-Fi и СКУД, Выявление уязвимостей ПО серверов и рабочих станций, Пентест инфраструктуры методом черного ящика. Подробнее .

Те, кто использует 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.

Читайте также:  Менеджер образов для windows 10

В общем, для тех, у кого проблема с 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.

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

Как заставить CURL работать с PHP на Windows? (WAMP)

обновление: проблема, похоже, была повреждена DLL где-то в моей установке PHP или, возможно, ошибка в PHP 5.2.9 на Win2k. Я загрузил дистрибутив Windows (только двоичные файлы) PHP 5.2.10 из php.net и добыл это для моего c:PHP справочник. После этого все работало нормально.

обновление 2: я уничтожил все, что я пробовал ранее (все из маркированного списка ниже),за исключением что я оставил » extension=php_curl.dll » uncommented в моем php.ini-файл. Оказывается, это все, что вам нужно сделать при правильной установке.

я пытаюсь заставить CURL работать над установкой Windows PHP (версия 5.2.9-2), и я нахожусь в конце. Я нашел страница установки PHP CURL, это так вопрос какие ссылки на этой странице и это так вопрос. Я пробовал большинство предложений на всех этих страницах, но Я все еще получаю ошибку. Вот моя очень простая тестовая страница:

критическая ошибка: вызов неопределенной функции curl_init() в C:ApacheRootcurltest.в PHP on line 2

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

PHP Warning: PHP Startup: Unable to load dynamic library ‘C:PHPextphp_curl.dll’ — The specified procedure could not be found.rn in Unknown on line 0

я сделал следующий:

  • Раскомментировал следующую строку в php.ini: extension=php_curl.dll
  • скопировал ssleay32.dll и libeay32.dll от C:PHP к C:WINNTSystem32
  • скачал cURL для Win32 из завиток.Хакс.se и извлек .zip-файл в C:cURL
  • добавил C:cURL в моей системе переменная среды PATH.
  • подтверждено, что:
    • php.Ини включает в себя extension_dir=»C:PHPext»
    • каталог C:PHPext содержит php_curl.dll
    • только php.ini файл в моей системе находится в C:PHP (то есть тем более что нет C:WINNTphp.ini )
    • Апач httpd.conf файл включает строку PHPIniDir «C:/PHP/»

у меня также перезагрузил машину (несколько раз, на самом деле. ).

7 ответов

вам не нужно перезагружать компьютер, просто перезапустите apache, и модуль php прочитает новый ini.
Вы изменили правильный php.Ини? В случае сомнений

могу вам сказать.

есть что-то в ошибке.журнал apache, который указывает, что что-то пошло не так При загрузке php и php_curl.dll файлы?

вы запустили apache как службу win32? Если вы попытаетесь запустить его как консольное приложение. Сообщение об ошибке появится на консоли тогда. Или запустите его как сервис и посмотрите на ошибку.файл журнала и журнал событий windows (запуск, запуск, eventvwr.msc /s ).

edit:
«Указанная процедура не найдена»
Вам нужна dll, совместимая с вашей версией php и сборкой. Что именно вы установили и где вы это взяли?

  1. полностью остановить WAMP.
  2. найти папку ПУВР:\C:\Path\To\WAMP\bin\Apache\ApacheVersion\bin
  3. отредактируйте этот php.расширение ini и uncomment=php_curl.dll файлы
  4. перезапустить WAMP.

это, надеюсь, решит проблему.

* EDIT: сделайте то же самое @ C:\Path\To\WAMP\bin\php\PHPVersion\

Это то, что сработало для меня

ответил Сорен из другой такой же нити -завиток для WAMP

«кажется, где-то есть ошибка. Если вы испытываете это на 64-битном Win 7, попробуйте установить Apache addon версии 2.2.9 и php addon версии 5.3.1 и переключиться на WAMP, а затем активировать расширение CURL. Это сработало для меня.»

это исправило его для меня:

остановить сервер WAMP от запуска

извлеките файл ‘ php_curl.в DLL’.

на локальном компьютере перейдите к (или где находится установка WAMP) c:\wamp\bin\php\php5.3.13\ext

переименовать php_curl.dll для php_curl.файл DLL.старый (или что вы выбираете), а затем скопируйте новый файл в вышеуказанный каталог.

перезапустить сервер WAMP

все должно работать нормально теперь.

У меня была такая же проблема с php-5.5.26-Win32-VC11-x64 (в Windows), и я попробовал все, что здесь перечислено, без везения. Наконец, я получил его работу, добавив каталог установки PHP В Windows Path.

с PHP 5.6.9 на Windows Server Core 2012 x64 cURL не работал, не появляясь в phpinfo, несмотря на раскомментированный php_curl.dll расширение в моем php.ini и перезапуск службы Apache 2.4. Добавлен путь php и путь php\ext к моему $evn: path. Никакая радость.

Читайте также:  Accept socket linux examples

Fix: мне не нужно было загружать любой другой php_curl.dll-файл и не смог найти его для PHP 5.6 в любом случае. Наконец, удалось скопировать эти три файла в папку Apache24\bin, а затем перезапустить Апач:

ssleay32.файл DLL Копирование их в System или System32 не требовалось.

Если проблема сохраняется после раскомментируйте модуль с версиями PHP.ini-файлы (о которых люди уже говорят и которые находятся в папке apache и папке php) и даже после того, как вы проверите, что у вас есть php_curl.dll * * at

ВЫ ДОЛЖНЫ ПОПЫТАТЬСЯ ЗАМЕНИТЬ ОРИГИНАЛЬНУЮ DLL, КОТОРАЯ ПОСТАВЛЯЕТСЯ С WAMPSERVER С одним из этот сайт:

моя проблема была там! Надеюсь, это поможет.

Php curl windows x64

PHP поддерживает libcurl, библиотеку, созданную Daniel»ом Stenberg»ом, которая даёт возможность соединяться с серверами различных типов и по разным протоколам.
libcurl в настоящее время поддерживает протоколы http, https, ftp, gopher, telnet, dict, file и ldap.
libcurl также поддерживает сертификаты HTTPS, HTTP POST, HTTP PUT, загрузку по FTP (это можно сделать также РНР-расширением ftp), загрузку на основе форм HTTP, прокси, куки и аутентификацию user+password.

Эти функции были введены в PHP 4.0.2.

curl_init

curl_init — инициализирует CURL-сессию.

Описание

resource curl_init([string url])

Функция curl_init() инициализирует новую сессию и возвратит CURL-дескриптор для использования в функциях curl_setopt(), curl_exec() и curl_close(). Если необязательный параметр url предоставлен, то опция CURLOPT_URL получит значение этого параметра. Вы можете вручную устанавливать его с помощью функции curl_setopt().

curl_setopt

curl_setopt — устанавливает опции для CURL-трансфера/transfer.

Описание

bool curl_setopt (resource ch, string option, mixed value)

Функция curl_setopt() устанавливает опции для CURL-сессии, идентифицируемой параметром ch. Параметр option является опцией, которую вы хотите установить, а value это значение опции option.

Параметр value должен быть long для следующих опций (специфицированных параметром option):

  • CURLOPT_INFILESIZE: Если вы выгружаете файл на удалённый сайт, эта опция должна использоваться, для того чтобы сообщит PHP, какой будет ожидаемый размер infile.
  • CURLOPT_VERBOSE: Установите эту опцию в ненулевое значение, если вы хотите, чтобы CURL сообщала обо всех действиях.
  • CURLOPT_HEADER: Установите эту опцию в ненулевое значение, если вы хотите, чтобы шапка/header включалась в вывод.
  • CURLOPT_NOPROGRESS: Установите эту опцию в ненулевое значение, если вы не хотите, чтобы PHP выводил индикатор процесса CURL-трансфера. (PHP автоматически устанавливает эту опцию в ненулевое значение, изменять её необходимо лишь при отладке.)
  • CURLOPT_NOBODY: Установите эту опцию в ненулевое значение, если вы не хотите, чтобы тело/body включалось в вывод.
  • CURLOPT_FAILONERROR: Установите эту опцию в ненулевое значение, если вы хотите, чтобы PHP завершал работу скрыто, если возвращаемый HTTP-код имеет значение выше 300. По умолчанию страница возвращается нормально с игнорированием кода.
  • CURLOPT_UPLOAD: Установите эту опцию в ненулевое значение, если вы хотите, чтобы PHP подготавливал файл к выгрузке.
  • CURLOPT_POST: Установите эту опцию в ненулевое значение, если вы хотите, чтобы PHP выполнял регулярный HTTP POST. Этот POST имеет нормальный вид application/x-www-form-urlencoded, чаще всего используемый HTML-формами.
  • CURLOPT_FTPLISTONLY: Установите эту опцию в ненулевое значение, и PHP будет выводит листинг имён FTP-директории.
  • CURLOPT_FTPAPPEND: Установите эту опцию в ненулевое значение, и PHP будет присоединять к удалённому/remote файлу, вместо его перезаписи.
  • CURLOPT_NETRC: Установите эту опцию в ненулевое значение, и PHP будет сканировать ваш файл

./netrc с целью поиска ваших username и password для удалённого сайта, с которым вы устанавливаете соединение.

  • CURLOPT_FOLLOWLOCATION: Установите эту опцию в ненулевое значение, чтобы следовать любому «Location: » header, который сервер высылает как часть HTTP header»а (заметьте, что это рекурсия, PHP будет следовать за всеми «Location: «-header»ами, которые высылаются.)
  • CURLOPT_PUT: Установите эту опцию в ненулевое значение, чтобы HTTP PUT файл. Файл для PUT обязан быть установлен с помощью CURLOPT_INFILE и CURLOPT_INFILESIZE.
  • CURLOPT_MUTE: Установите эту опцию в ненулевое значение, и PHP будет работать скрыто в отношении CURL-функций.
  • CURLOPT_TIMEOUT: Передаёт long как параметр, который содержит максимальное время в секундах, которое вы отводите для работы CURL-функций.
  • CURLOPT_CONNECTTIMEOUT: Передаёт long как параметр, который содержит максимальное время в секундах, которое вы отводите для ожидания при попытке подключения. Используйте 0 чтобы ждать бесконечно.
  • CURLOPT_LOW_SPEED_LIMIT: Передаёт long как параметр, который содержит скорость трансфера в байтах в секунду, ниже которого трансфер должен работать в процессе выполнения CURLOPT_LOW_SPEED_TIME, в секундах, чтобы PHP считал его слишком медленным и прерывал его.
  • CURLOPT_LOW_SPEED_TIME: Передаёт long как параметр, который содержит время в секундах, ниже которого трансфер должен работать в процессе выполнения CURLOPT_LOW_SPEED_LIMIT, чтобы PHP считал его слишком медленным и прерывал его.
  • CURLOPT_RESUME_FROM: Передаёт long как параметр, который содержит смещение в байтах, с которого трансфер должен стартовать.
  • CURLOPT_SSLVERSION: Передаёт long как параметр, который содержит используемую версию SSL (2 или 3). По умолчанию PHP пытается определить это сам, хотя в некоторых случаях вы обязаны устанавливать это вручную.
  • CURLOPT_SSL_VERIFYHOST: Передаёт long, если CURL должна проверять Common-имя peer-сертификата в SSL handshake/»рукопожатие». Значение 1 указывает, что мы должны проверить существование общего /common имени, значение 2 указывает, что мы должны убедиться в совпадении с предоставленным hostname.
  • CURLOPT_TIMECONDITION: Передаёт long как параметр, который определяет, как рассматривается CURLOPT_TIMEVALUE. Вы можете установить этот параметр для TIMECOND_IFMODSINCE или TIMECOND_ISUNMODSINCE. Это действует только для HTTP.
  • CURLOPT_TIMEVALUE: Передаёт long как параметр, который является временем в секундах, прошедшим после 1 января 1970. Это время используется, как специфицировано опцией CURLOPT_TIMEVALUE, или по умолчанию будет использоваться TIMECOND_IFMODSINCE.
  • CURLOPT_RETURNTRANSFER: Передаёт ненулевое значение, если вы хотите, чтобы CURL непосредственно возвращала полученную информацию, вместо её печати напрямую.
  • Параметр value должен быть строкой для следующих значений параметра option:

    • CURLOPT_URL: Это URL, который PHP должен получать. Вы можете также устанавливать эту опцию при инициализации сессии функцией curl_init().
    • CURLOPT_USERPWD: Передаёт в РНР строку, отформатированную в виде [username]:[password], для использования при соединении.
    • CURLOPT_PROXYUSERPWD: Передаёт в РНР строку, отформатированную в виде [username]:[password], для соединения с HTTP-прокси.
    • CURLOPT_RANGE: Передаёт специфицированный вами диапазон. Он должен быть в формате «X-Y», где X или Y могут отсутствовать. HTTP-трансферы поддерживают также различные интервалы, разделённые запятыми, как, например, X-Y,N-M.
    • CURLOPT_POSTFIELDS: Передаёт строку, содержащую полные данные для передачи операцией HTTP «POST».
    • CURLOPT_REFERER: Передаёт строку, содержащую «referer/ссылающийся» header, используемый в HTTP-запросе.
    • CURLOPT_USERAGENT: Передаёт строку, содержащую «user-agent» header, используемый в HTTP-запросе.
    • CURLOPT_FTPPORT: Передаёт строку, содержащую значение, которое будет использоваться для получения IP-адреса для инструкции ftp «POST». POST-инструкция указывает удалённому серверу: соединиться со специфицированным IP-адресом. Строка может быть обычным IP-адресом, hostname/именем хоста, именем сетевого интерфейса (под UNIX), или просто обычным «-«, используемым для системного IP-адреса по умолчанию.
    • CURLOPT_COOKIE: Передаёт строку с содержимым куки/cookie, установленным в HTTP header»е.
    • CURLOPT_SSLCERT: Передаёт строку, содержащую filename форматированного сертификата PEM.
    • CURLOPT_SSLCERTPASSWD: Передаёт строку, содержащую password, необходимый для работы сертификата CURLOPT_SSLCERT.
    • CURLOPT_COOKIEFILE: Передаёт строку, содержащую имя файла с данными куки. Этот cookie-файл может иметь формат Netscape, или содержать обычные шапки/headers в HTTP-стиле, забитые в файл.
    • CURLOPT_CUSTOMREQUEST: Передаёт строку, используемую вместо GET или HEAD при выполнении HTTP-запроса. Это делается для выполнения DELETE или других, более скрытых HTTP-запросов. Верными значениями являются GET, POST и так далее; то есть не вводите здесь полную строку HTTP-запроса. Например, ввод «GET /index.html HTTP/1.0» будет некорректным. (не делайте это, если не уверены, что ваш сервер поддерживает эту команду.)
    • CURLOPT_PROXY: Передаёт имя HTTP-прокси туннельным запросам.
    • CURLOPT_INTERFACE: Передаёт имя исходящего сетевого интерфейса для использования. Это может быть имя интерфейса, IP-адрес или имя хоста. ( curl_setopt($ch, CURLOPT_INTERFACE, $extip) )
    • CURLOPT_KRB4LEVEL: Передаёт KRB4 (Kerberos 4) уровень секретности. Это любая из следующих строк (в порядке от менее до более мощной): «clear», «safe», «confidential», «private».
      Если эта строка не совпадает с какой-либо из указанных, то используется «private». Если вы установите здесь NULL, это отключит KRB4-безопасность. KRB4-безопасность работает в настоящее время только с транзакциями FTP.
    • CURLOPT_HTTPHEADER: Передаёт массив полей HTTP-header»а для установки.
    • CURLOPT_QUOTE: Передаёт массив FTP-команд для выполнения на сервере до выполнения FTP-запроса.
    • CURLOPT_POSTQUOTE: Передаёт массив FTP-команд для выполнения на сервере после выполнения FTP-запроса.

    Следующие опции ожидают дескриптора файла, который получается с помощью функции fopen():

    • CURLOPT_FILE: Файл, куда должен быть помещён вывод вашего трансфера, по умолчанию это STDOUT.
    • CURLOPT_INFILE: Файл, из которого приходит ввод вашего трансфера.
    • CURLOPT_WRITEHEADER: Файл для записи header-части вывода.
    • CURLOPT_STDERR: Файл для записи ошибок, вместо stderr.

    Параметр value должен быть функцией следующего вида long write_callback (resource ch, string data) для следующих значений параметра option:

    • CURLOPT_WRITEFUNCTION: .
    • CURLOPT_HEADERFUNCTION: .

    Параметр value должен быть функцией следующего вида string read_callback (resource ch, resource fd, long length)<> для следующих значений параметра option:

    Читайте также:  Самый популярный дистрибутив линукс 2021
    Оцените статью