翼度科技»论坛 编程开发 PHP 查看内容

curl_setopt中的CURLOPT_WRITEFUNCTION使用回调和闭包

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
在PHP中,
  1. curl_setopt
复制代码
函数的
  1. CURLOPT_WRITEFUNCTION
复制代码
是 PHP 中的 cURL 库的一个选项,允许你指定一个回调函数,这个回调函数会处理从服务器接收到的数据。这个回调函数应该有两个参数,第一个是接收到的数据,第二个是写入数据的长度。
使用闭包作为回调函数可以保持闭包外部变量的状态。以下是一个使用闭包和
  1. CURLOPT_WRITEFUNCTION
复制代码
的示例:
  1. $ch = curl_init();  
  2. // ... 其他 curl_setopt 调用 ...  
  3. // 初始化一个用于存储数据的变量  
  4. $buffer = '';  
  5. curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) use (&$buffer) {  
  6.     $length = strlen($data);  
  7.     $buffer .= $data; // 将接收到的数据追加到 $buffer 中  
  8.     return $length; // 返回接收到的数据长度,这是必须的  
  9. });  
  10. // 执行请求  
  11. curl_exec($ch);  
  12. // 关闭 cURL 句柄  
  13. curl_close($ch);  
  14. // 现在 $buffer 包含了从 cURL 接收到的所有数据  
  15. echo $buffer;
复制代码
注意几点:
回调函数必须返回一个整数,表示它已处理的字节数。在这个例子中,返回$data 字符串的长度。
确保在调用 curl_exec 之后检查 $buffer,因为它是在那里填充的。
使用 CURLOPT_WRITEFUNCTION 来处理 cURL 请求返回的数据,而不使用外部变量。在回调函数中,你可以直接处理数据,但如果你需要在请求完成后访问这些数据,那么你需要将它们存储在某个地方,比如类属性、全局变量、闭包中的静态变量等。
完整示例
  1. class CurlHandler {  
  2.     private $dataBuffer = '';  
  3.     public function fetchData($url) {  
  4.         $ch = curl_init();  
  5.         curl_setopt($ch, CURLOPT_URL, $url);  
  6.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);  
  7.         curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) use ($this) {  
  8.             $this->dataBuffer .= $data; // 将数据追加到类属性中  
  9.             return strlen($data);  
  10.         });  
  11.         curl_exec($ch);  
  12.         curl_close($ch);  
  13.         return $this->dataBuffer; // 返回完整的数据  
  14.     }  
  15. }  
  16. $handler = new CurlHandler();  
  17. $data = $handler->fetchData('http://example.com');  
  18. echo $data; // 输出从 URL 获取的数据
复制代码
在处理 cURL 请求时,CURLOPT_WRITEFUNCTION 选项确实非常有用,特别是当你想以自定义的方式处理接收到的数据时。使用类属性或闭包中的静态变量是存储这些数据以便稍后使用的常用方法。

到此这篇关于curl_setopt中的CURLOPT_WRITEFUNCTION使用回调和闭包的文章就介绍到这了,更多相关curl_setopt使用回调和闭包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/program/3264416p9.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具