使用cURL句柄作为数组键

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句柄映射到创建它们的作业?

Fra*_*ois 7

将私有数据存储在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在页面内搜索).


Pek*_*ica 2

由于某些隐式类型转换,它可能会起作用,但对我来说根本感觉不对。我认为未来的版本会以不同的方式对待资源、不同的平台,这会在某个地方引发麻烦......

我个人不会这样做,而是使用数字索引。