CakeFest 2024: The Official CakePHP Conference

curl_init

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

curl_init初始化 cURL 会话

说明

curl_init(?string $url = null): CurlHandle|false

初始化新会话,返回 cURL 句柄,供 curl_setopt()curl_exec()curl_close() 函数使用。

参数

url

如果提供了该参数,CURLOPT_URL 选项将会被设置成这个值。也可以使用 curl_setopt() 函数手动地设置这个值。

注意:

如果设置了 open_basedirfile 协议会被 cURL 禁用。

返回值

成功时返回 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);

// 抓取 URL 并把它传递给浏览器
curl_exec($ch);

// 关闭 cURL 资源,并且释放系统资源
curl_close($ch);
?>

参见

add a note

User Contributed Notes 2 notes

up
2
NextgenThemes
11 months ago
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.
up
-2
VictorWumble
4 months ago
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.
To Top