curl_setopt中的CURLOPT_WRITEFUNCTION使用回调和闭包 |
|
在PHP中, 使用闭包作为回调函数可以保持闭包外部变量的状态 。以下是一个使用闭包和 $ch = curl_init();
// ... 其他 curl_setopt 调用 ...
// 初始化一个用于存储数据的变量
$buffer = '';
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) use (&$buffer) {
$length = strlen($data);
$buffer .= $data; // 将接收到的数据追加到 $buffer 中
return $length; // 返回接收到的数据长度,这是必须的
});
// 执行请求
curl_exec($ch);
// 关闭 cURL 句柄
curl_close($ch);
// 现在 $buffer 包含了从 cURL 接收到的所有数据
echo $buffer;注意几点: 回调函数必须返回一个整数,表示它已处理的字节数 。在这个例子中,返回$data 字符串的长度 。 完整示例 class CurlHandler {
private $dataBuffer = '';
public function fetchData($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) use ($this) {
$this->dataBuffer .= $data; // 将数据追加到类属性中
return strlen($data);
});
curl_exec($ch);
curl_close($ch);
return $this->dataBuffer; // 返回完整的数据
}
}
$handler = new CurlHandler();
$data = $handler->fetchData('http://example.com');
echo $data; // 输出从 URL 获取的数据在处理 cURL 请求时,CURLOPT_WRITEFUNCTION 选项确实非常有用,特别是当你想以自定义的方式处理接收到的数据时 。使用类属性或闭包中的静态变量是存储这些数据以便稍后使用的常用方法 。 到此这篇关于curl_setopt中的CURLOPT_WRITEFUNCTION使用回调和闭包的文章就介绍到这了,更多相关curl_setopt使用回调和闭包内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |