Tim*_*tle 4 php curl curl-multi
我正在使用curl_multi函数来请求多个URL并在完成时处理它们.当一个连接完成时,我真正拥有的是cURL句柄(和相关数据)curl_multi_info_read().
URL来自作业队列,一旦处理,我需要从队列中删除作业.我不想依靠URL识别工作(有不应该是重复的URL,但如果有什么是).
到目前为止我已经解决的解决方案是使用cURL句柄作为指向jobid的数组键.形成我能说的,当被视为字符串时,句柄就像:
"Resource id #1"
Run Code Online (Sandbox Code Playgroud)
这种接缝对我而言是相当独特的.基本代码是:
$ch = curl_init($job->getUrl());
$handles[$ch] = $job;
//then later
$done = curl_multi_info_read($master);
$handles[$done['handle']]->delete();
curl_multi_remove_handle($master, $done['handle']);
Run Code Online (Sandbox Code Playgroud)
以这种方式使用cURL手柄是否安全?
或者是否有更好的方法将cURL句柄映射到创建它们的作业?
将私有数据存储在cURL easy handle中,例如某些作业ID:
curl_setopt($ch, CURLOPT_PRIVATE, $job->getId());
// then later
$id = curl_getinfo($done['handle'], CURLINFO_PRIVATE);
Run Code Online (Sandbox Code Playgroud)
PHP手册中尚未记录此"私有数据"功能.它已在PHP 5.2.4中引入.它允许您在cURL句柄中存储和检索您选择的字符串.将其用于唯一标识作业的键.
编辑:功能现在记录在PHP手册中(CURLOPT_PRIVATE在页面内搜索).
由于某些隐式类型转换,它可能会起作用,但对我来说根本感觉不对。我认为未来的版本会以不同的方式对待资源、不同的平台,这会在某个地方引发麻烦......
我个人不会这样做,而是使用数字索引。
| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |