我现在有一组数据,然后是通过 curl 的并发进行请求的, 但是我需要具体知道 请求过去的哪条数据出现了错误什么的; 这个curl并发是否可以知道请求的顺序?
比如 我现在一组数据:
$test = [
[
abc: 1123
],
[
abc: 3333
],
[
abc: 444
]
];
当我并发请求这三条数据的时候,我要知道具体是哪个 abc 的值 发生了错误, 请问这个顺序如何标记?
各种返回值,我都打印过,看不出有什么规律, 有朋友知道否?
示例代码如下:
$k = 0;
$query = '{"0":{"extension_number":"101","password":"101"},"1":{"extension_number":"102","password":"102"},"2":{"extension_number":"103","password":"103"},"3":{"extension_number":"104","password":"104"},"4":{"extension_number":"105","password":"105"},"5":{"extension_number":"106","password":"106"},"6":{"extension_number":"107","password":"107"},"7":{"extension_number":"108","password":"108"},"8":{"extension_number":"109","password":"109"},"9":{"extension_number":"110","password":"110"},"access_token":"3371AFB69D4248FDACC742C556916B87"}';
$query = json_decode($query, 1);
foreach ($strarr as $key=>$value)
{
//首先创建10个句柄
for ($i=0; $i<10; $i++)
{
$value[$i]['access_token'] = 'F11A7791C2684042BBF62C38AA01D428';
$ch[$k] = curl_init();
//设置抓取的url
curl_setopt($ch[$k], CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($ch[$k], CURLOPT_HEADER, 1);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($ch[$k], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[$k], CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch[$k], CURLOPT_SSL_VERIFYHOST, FALSE);
//设置post方式提交
curl_setopt($ch[$k], CURLOPT_POST, 1);
curl_setopt($ch[$k], CURLOPT_POSTFIELDS, json_encode($value[$i]));
curl_multi_add_handle($mh,$ch[$k]);
$k++;
};
}
$active = null;
// 执行批处理句柄
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
// 关闭全部句柄
foreach ($ch as $n=>$m)
{
$content=curl_multi_getcontent($m);
file_put_contents('hellow.php', $content."\r\n", FILE_APPEND);
curl_close($m);
curl_multi_remove_handle($mh, $m);
}
curl_multi_close($mh);
当我并发请求的时候, 如果有请求失败的, 我需要具体知道是第几条数据请求失败了,
因为我需要记录这条失败记录的 extension_number 的值
如果是这样的话,简单的方法就是,你在 while 前创建一个空的数组 $errorArr 然后在 while 里面将每个报错信息写进去,对应的索引就是对应的报错信息。