This may be obvious, but:
Note that is MUCH faster to use use a single instance to make a series of curl requests rather than creating a new instance for each request.
(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)
curl_init — Инициализирует cURL-сеанс
Функция инициализирует новую сессию модуля cURL и возвращает дескриптор, с которым работают функции curl_setopt(), curl_exec() и curl_close().
url
Функция автоматически установит значение аргумента,
который передали в этот параметр, опции CURLOPT_URL
.
Модуль разрешает ручную установку значения опции
функцией curl_setopt() после инициализации сеанса.
Замечание:
Модуль cURL отключает протокол
file
, если установили директиву open_basedir.
Функция возвращает cURL-дескриптор в случае успешного выполнения, или false
,
если возникла ошибка.
Версия | Описание |
---|---|
8.0.0 | Теперь в случае успешного выполнения функция возвращает экземпляр класса CurlHandle; раньше возвращался ресурс (resource). |
8.0.0 |
Параметр url теперь принимает значение null.
|
Пример #1 Пример инициализации нового cURL-сеанса и получение веб-страницы
<?php
// Создаём новую cURL-сессию
$ch = curl_init();
// Устанавливаем URL-адрес и другие параметры
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
// Получаем страницу и передаём её в браузер
curl_exec($ch);
// Завершаем cURL-сеанс и высвобождаем системные ресурсы
curl_close($ch);
?>
This may be obvious, but:
Note that is MUCH faster to use use a single instance to make a series of curl requests rather than creating a new instance for each request.
NextgenThemes' note is applicable for very very limited situations. For completeness's sake, let's consider the following code snippet:
<?php
/*
Your localhost has a default Apache which simply returns "It works!"
*/
$repeatCount = 1000;
// begin section
// this section is slow
// call localhost, create new handle each time
$time = microtime(true);
foreach (range(1, $repeatCount) as $ignored) {
$ch = curl_init("http://localhost");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// do something with the response
unset($response);
curl_close($ch);
}
unset($ch);
$elapsed = microtime(true) - $time;
echo "Recreate curl handle, time taken: " . $elapsed . "\n";
// end section
// begin section
// this section is much faster
// call localhost, but reuse the handle
$time = microtime(true);
$ch = curl_init("http://localhost");
foreach (range(1, $repeatCount) as $ignored) {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// do something with the response
unset($response);
}
curl_close($ch);
$elapsed = microtime(true) - $time;
echo "Reuse curl handle, time taken: " . $elapsed . "\n";
// end section
/*
Example output:
Recreate curl handle, time taken: 11.289301872253
Reuse curl handle, time taken: 0.53790807723999
*/
?>
The above code supports the claim by NextgenThemes, however the "send curl requests in sequence" method in general is unnecessarily slow because:
- network transfer time (e.g. 100ms)
- remote processing time (e.g. 50ms)
- usually, no need to send requests in specific sequence
So, in practice, when you need to send multiple curl requests at the same time, just use the curl_multi_init method. Don't consider the "send curl requests in sequence" method unless you have very very specific/special needs.