Добро пожаловать!
Здесь вы можете найти ответ на интересующий вас вопрос в отрасли сайтостроения, познакомится ближе с web технологиями и web стандартами.

Статьи

Библиотека CURL (Client URL Library)

PHP поддерживает библиотеку libcurl, созданную Даниелем Стенбергом (Daniel Stenberg), позволяющую осуществлять подключение и взаимодействие с различными типами серверов, используя самые разнообразные протоколы. В настоящее время libcurl поддерживает протоколы http, https, ftp, gopher, telnet, dict, file, ldap. Также библиотека поддерживает сертификаты HTTPS, методы HTTP POST и PUT, загрузку с FTP и HTTP, прокси, cookies и аутентификацию пользователя с паролем.

Чтобы использовать функции CURL, необходимо инсталлировать пакет CURL, который можно загрузить со страницы http://curl.haxx.se. PHP необходима версия CURL 7.0.2-beta или выше. Затем нужно перекомпилировать PHP с дополнительным параметром --with-curl[=DIR], где DIR указывает на расположение директории пакета, содержащей поддиректории lib и include. В директории include должна находиться папка curl, содержащая файлы easy.h и curl.h, а в директории lib должен находиться файл libcurl.a.

Схема использования функций проста. Сначала при помощи функции curl_ init() инициализируется сессия CURL. При этом устанавливаются параметры передачи, с которыми она будет выполнена функцией curl_exec(), после чего сессия может быть завершена при помощи функции curl_close(). Ниже приведен пример, получающий домашнюю страницу PHP и сохраняющий ее в файле.

<?php
$ch 
curl_init ("http://www.php.net/");
$fp fopen ("php_homepage.txt""w");
curl_setopt ($chCURLOPT_FILE$fp);
curl_setopt ($chCURLOPT_HEADER0);
curl_exec ($ch);
curl_close ($ch);
fclose ($fp);
?>

curl_init. Открытие сеанса CURL

int curl_init ([string url])

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

Пример использования функции:

<?php
$ch 
curl_init();
curl_setopt ($chCURLOPT_URL"http://www.zend.com/");
curl_setopt ($chCURLOPT_HEADER0);
curl_exec ($ch);
curl_close ($ch);
?>

curl_setopt. Установка параметров передачи CURL

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

Функция устанавливает параметр, имеющий имя option, сессии CURL с именем ch, в значение value.

Для возможных значений аргумента option, которые перечислены в следующем списке, соответствующее значение value должно указываться в виде целого числа:

  • CURLOPT_INFILESIZE — установить ожидаемый размер получаемого файла при его загрузке на удаленный сервер.
  • CURLOPT_VERBOSE — при ненулевом значении будет сообщаться все, что происходит во время сессии.
  • CURLOPT_HEADER — при ненулевом значении заголовок будет включаться в содержимое вывода.
  • CURLOPT_NOPROGRESS — при ненулевом значении блокируется отображение индикатора хода выполнения операций передачи. По умолчанию этот параметр установлен, и его следует изменять только для целей отладки.
  • CURLOPT_NOBODY — при ненулевом значении содержимое тега BODY не будет включаться в вывод.
  • CURLOPT_FAILONERROR — при ненулевом значении будет происходить обычное завершение сценария PHP, если будет получен код возврата HTTP со значением большим, чем 300. По умолчанию происходит нормальный возврат в сценарий с игнорированием кода, вызвавшего ошибку.
  • CURLOPT_UPLOAD — при ненулевом значении происходит подготовка PHP для загрузки.
  • CURLOPT_POST — при ненулевом значении PHP выполняет обычный метод HTTP POST. Тип POST будет иметь нормальный вид application/x-www-from-urlencoded.
  • CURLOPT_FTPLISTONLY — при ненулевом значении PHP будет выводить имена файлов только в FTP.
  • CURLOPT_FTPAPPEND — при ненулевом значении PHP будет осуществлять добавление в конец существующего удаленного FTP-файла, вместо его перезаписи.
  • CURLOPT_NETRC — при ненулевом значении PHP будет просматривать файл ~./netrc в поисках имени пользователя и пароля для осуществления доступа к удаленному сайту.
  • CURLOPT_FOLLOWLOCATION — при ненулевом значении переадресация будет проходить согласно HTTP-заголовкам Location.
  • CURLOPT_PUT — при ненулевом значении файл отсылается методом HTTP PUT. Параметры файла CURLOPT_INFILE и CURLOPT_INFILESIZE также должны быть указаны.
  • CURLOPT_MUTE — при ненулевом значении PHP будет исполнять функции CURL без дополнительного вывода.
  • CURLOPT_TIMEOUT — позволяет передать целочисленный параметр, определяющий в секундах максимально допустимое время исполнения функций CURL.
  • CURLOPT_LOW_SPEED_LIMIT — принимает целочисленный параметр, определяющий скорость передачи данных в байтах в секунду, которая будет использоваться для проверки установленного соединения. Сеанс прерывается, если превышается время максимально допустимого ожидания CURLOPT_LOW_SPEED_TIME.
  • CURLOPT_LOW_SPEED_TIME — принимает целочисленный параметр, определяющий максимальное время передачи данных в секундах, при скорости CURLOPT_LOW_SPEED_LIMIT. При превышении этого времени PHP будет прерывать выполнение операции, рассматривая ее как недопустимо медленную.
  • CURLOPT_RESUME_FROM — принимает целочисленный параметр, определяющий смещение в байтах, с которого должна начинаться передача.
  • CURLOPT_SSLVERSION — принимает целочисленный параметр, определяющий используемую версию SSL. По умолчанию PHP будет пытаться самостоятельно определить версию, хотя в некоторых случаях ее следует устанавливать вручную.
  • CURLOPT_TIMECONDITION — позволяет передать константный параметр, определяющий смысл параметра CURLOPT_TIMEVALUE. Можно использовать значение по умолчанию TIMECOND_IFMODSINCE или значение TIMECOND_ISUNMODSINCE.
  • CURLOPT_TIMEVALUE — позволяет передать целочисленный параметр, содержащий значение времени в формате "UNIX-timestamp". Это значение будет использоваться с учетом установки CURLOPT_TIMEVALUE.
  • CURLOPT_RETURNTRANSFER - при установке этого параметра в ненулевое значение CURL будет возвращать результат, а не выводить его.

Для следующих возможных значений аргумента option соответствующее значение value должно указываться в строковое значение.

  • CURLOPT_URL — адрес URL, по которому отправляется запрос. Этот параметр также можно установить при вызове функции curl_init().
  • CURLOPT_USERPWD — позволяет при подключении передавать строку в формате "[username]:[password]".
  • CURLOPT_PROXYUSERPWD — позволяет при подключении к HTTP-прокси передавать строку в формате "[username]:[password]".
  • CURLOPT_RANGE — заставляет передавать диапазон в формате "X-Y", где значение X или Y может быть не указано. При использовании протокола HTTP возможна одновременная передача нескольких интервалов, разделенных запятыми.
  • CURLOPT_POSTFIELDS — позволяет передавать полную строку данных, посылаемых методом HTTP POST.
  • CURLOPT_REFERER — позволяет передавать строку, содержащую заголовок "referer", используемый в запросах HTTP.
  • CURLOPT_USERAGENT — позволяет передавать строку, содержащую заголовок "user-agent", используемый в запросах HTTP.
  • CURLOPT_FTPPORT — позволяет передавать строку, содержащую значение IP- адреса, используемого инструкцией POST для подключения к удаленному серверу FTP. Эта строка может содержать простой IP-адрес, имя хоста или имя сетевого интерфейса (под UNIX), или даже символ ?, указывающий системный адрес IP, используемый по умолчанию.
  • CURLOPT_COOKIE — позволяет передать строку с содержимым cookie, который будет отправлен в заголовке HTTP.
  • CURLOPT_SSLCERT — позволяет передать строку с именем файла, содержащего SSL-сертификат формата PEM.
  • CURLOPT_SSLCERTPASSWD — позволяет передать строку с паролем, необходимым для использования сертификата, указанного параметром CURLOPT_SSLCERT.
  • CURLOPT_COOKIEFILE — позволяет передать строку с именем файла, содержащего данные cookie. Этот файл должен быть в формате Netscape или в виде простого заголовка HTTP, сохраненного в файле.
  • CURLOPT_CUSTOMREQUEST — позволяет передать строку, которая будет использоваться вместо HTTP запроса GET или HEAD. Этот механизм можно использовать при выполнении устаревшего запроса HTTP, например DELETE. Не стоит использовать эту возможность, не выяснив предварительно, поддерживает ли сервер указанную команду.

Для следующих возможных значений аргумента option соответствующее значение value должно указываться дескриптором, полученным от функции fopen().

  • CURLOPT_FILE — указывается файл, в котором следует сохранять полученные данные. По умолчанию используется стандартный поток вывода stdout.
  • CURLOPT_INFILE — задается файл, из которого следует получать данные для передачи.
  • CURLOPT_WRITEHEADER — указывается файл для записи содержимого заголовков.
  • CURLOPT_STDERR — указывается файл для сохранения результатов ошибок вместо использовавшегося ранее потока stderr.

curl_exec. Выполнение CURL-сессии

bool curl_exec (int ch)

Функция выполняет подготовленную сессию. Эта функция должна вызываться после инициализации сессии CURL и после того, как все параметры сессии были установлены.

curl_close. Закрытие сеанса

void curl_close (int ch)

Функция закрывает сессию с освобождением всех ресурсов. Также удаляется дескриптор сессии CURL ch.

curl_version. Получение версии

string curl_version (void)

Функция возвращает строку с указанием текущей версии CURL.