10.4. Проект Curl
За проект Curl, целью которого является интерпретация URL и выборка из них данных, отвечает Дениел Стенберг (Daniel Stenberg). Для обеспечения возможности работы с проектом Curl для создаваемых сценариев PHP пользуется библиотекой Curl. Стандартный сеанс подразумевает создание ресурса Curl функцией curl_init, установку параметров с помощью функции curl_setopt и выполнение запроса с помощью curl_exec. Подход, реализованный в ходе работы над проектом Curl, предполагает вместо использования большого количества функций использование небольшого количества функций в совокупности с большим количеством констант, задаваемых с помощью функции curl_setopt.
Подробнее о проекте Curl можно узнать по адресу <http://curl.haxx.se/>.
Недавно в проект Curl был добавлен так называемый мультиинтерфейс. Теперь PHP поддерживает и эти функции, но нужно постоянно помнить об их относительной новизне. 
void curl_close(resource curl)
Функция curl_close освобождает память, занятую ресурсом Curl. integer curl_errno(resource curl)
Функция curl_errno возвращает номер последней ошибки, сгенерированной заданным ресурсом Curl. В табл. 10.9 приведены константы PHP, представляющие коды ошибок, возвращаемые функцией curl_errno.
Операции ввода-вывода на сетевом уровне
Операции ввода-вывода на сетевом уровне
string curl_error(resource curl)
Функция curl_error возвращает описание последней ошибки для заданного ресурса Curl.
boolean curl_exec(resource curl) string curl_exec(resource curl)
Функция curl_exec (листинг 10.22) предназначена для выполнения запроса. В за­висимости от параметра CURLOPT_RETURNTRANSFER функция curl_exec возвращает логическое значение или запрашиваемые данные. 
Листинг 10.22. Функция curl_exec

<?php
if(!($curl = curl_init()))
{
print("Невозможно инициализировать ресурс Curl!"); exit();
}
//Настроить процессор поиска php.net для выполнения запроса post curl_setopt($curl, OJRLOPTJJRL,
,http://www.php.net/search.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, OJRLOPT_POSTFIELDS,
'lang=en_US&pattern=Zend API&show=nosource'); // сделать запрос $results = curl_exec($curl); print("<pre>");
print(htmlentities($results)); print("</pre>");
?>

string curl_getinfo(resource curl, integer info)
Функция curl_getinfo (листинг 10.23) применяется для поиска информации о Curl-запросе. В табл. 10.10 приведен перечень констант, используемых в аргументе info.
Операции ввода-вывода на сетевом уровне
Операции ввода-вывода на сетевом уровне
Листинг 10.23. Функция curlgetinfo

<?php
// принять стартовую страницу узла Zend
$curl = curl_init('http://www.zend.com/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_exec($curl);
// получить различную информацию
print("CURLINFO_CONNECT_TIME: " .
curl_getinfo($curl, CURLINFO_CONNECT_TIME) .
'<br>');
print("CURLINFO_CONTENT_LENGTH_DOWNLOAD: " .
curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD) . '<br>');
print("CURLINFO_CONTENT_LENGTH_UPLOAD: " .
curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_UPLOAD) . '<br>'); 
print("CURLINFO_CONTENT_TYPE: " .
curl_getinfo($curl, CURLINFO_CONTENT_TYPE) . '<br>');
print("CURLINFO_EFFECTIVE_URL: " .
curl_getinfo($curl, CURLINFO_EFFECTIVE_URL) .
'<br>'); print("CURLINFO_FILETIME: " .
curl_getinfo($curl, CURLINFO_FILETIME) .
'<br>');
print("CURLINFO_HEADER_SIZE: " .
curl_getinfo($curl, CURLINFO_HEADER_SIZE) . '<br>');
print("CURLINFO_HTTP_CODE: " .
curl_getinfo($curl, CURLINFO_HTTP_CODE) . '<br>');
print("CURLINFO_NAMELOOKUP_TIME: " .
curl_getinfo($curl, CURLINFO_NAMELOOKUP_TIME) . '<br>');
print("CURLINFO_PRETRANSFER_TIME: " .
curl_getinfo($curl, CURLINFO_PRETRANSFER_TIME) . '<br>');
print("CURLINFO_REDIRECT_COUNT: " .
curl_getinfo($curl, CURLINFO_REDIRECT_COUNT) . '<br>');
print("CURLINFO_REDIRECT_TIME: " .
curl_getinfo($curl, CURLINFO_REDIRECT_TIME) . '<br>');
print("CURLINFO_REQUEST_SIZE: " .
curl_getinfo($curl, CURLINFO_REQUEST_SIZE) . '<br>');
print("CURLINFO_SIZE_DOWNLOAD: " .
curl_getinfo($curl, CURLINFO_SIZE_DOWNLOAD) . '<br>');
print("CURLINFO_SIZE_UPLOAD: " .
curl_getinfo($curl, CURLINFO_SIZE_UPLOAD) . '<br>');
print("CURLINFO_SPEED_DOWNLOAD: " .
curl_getinfo($curl, CURLINFO_SPEED_DOWNLOAD) . '<br>');
print("CURLINFO_SPEED_UPLOAD: " .
curl_getinfo($curl, CURLINFO_SPEED_UPLOAD) . '<br>');
print("CURLINFO_SSL_VERIFYRESULT: " .
curl_getinfo($curl, CURLINFO_SSL_VERIFYRESULT) . '<br>');
print("CURLINFO_STARTTRANSFER_TIME: " .
curl_getinfo($curl, CURLINFO_STARTTRANSFER_TIME) . '<br>');
print("CURLINFO_TOTAL_TIME: " .
curl_getinfo($curl, CURLINFO_TOTAL_TIME) . '<br>');
?> 
resource curl_init(string url)
Функция curl_init используется для создания дескриптора ресурса Curl. Необя­зательный аргумент url устанавливает параметр CURLOPT_URL.