鍍金池/ 問答/PHP  HTML/ 請(qǐng)教: php curl 并發(fā) 順序如何標(biāo)記

請(qǐng)教: php curl 并發(fā) 順序如何標(biāo)記

我現(xiàn)在有一組數(shù)據(jù),然后是通過 curl 的并發(fā)進(jìn)行請(qǐng)求的, 但是我需要具體知道 請(qǐng)求過去的哪條數(shù)據(jù)出現(xiàn)了錯(cuò)誤什么的; 這個(gè)curl并發(fā)是否可以知道請(qǐng)求的順序?

比如 我現(xiàn)在一組數(shù)據(jù):
$test = [

[
    abc: 1123
],
[
    abc: 3333
],

[
    abc: 444
]

];

當(dāng)我并發(fā)請(qǐng)求這三條數(shù)據(jù)的時(shí)候,我要知道具體是哪個(gè) abc 的值 發(fā)生了錯(cuò)誤, 請(qǐng)問這個(gè)順序如何標(biāo)記?

各種返回值,我都打印過,看不出有什么規(guī)律, 有朋友知道否?

示例代碼如下:
$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)
    {
        //首先創(chuàng)建10個(gè)句柄
        for ($i=0; $i<10; $i++)
        {
            $value[$i]['access_token'] = 'F11A7791C2684042BBF62C38AA01D428';

            $ch[$k] = curl_init();
            //設(shè)置抓取的url
            curl_setopt($ch[$k], CURLOPT_URL, $url);
            //設(shè)置頭文件的信息作為數(shù)據(jù)流輸出
            curl_setopt($ch[$k], CURLOPT_HEADER, 1);
            //設(shè)置獲取的信息以文件流的形式返回,而不是直接輸出。
            curl_setopt($ch[$k], CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch[$k], CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch[$k], CURLOPT_SSL_VERIFYHOST, FALSE);
            //設(shè)置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;
    // 執(zhí)行批處理句柄
    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);
        }
    }



    // 關(guān)閉全部句柄
    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);

當(dāng)我并發(fā)請(qǐng)求的時(shí)候, 如果有請(qǐng)求失敗的, 我需要具體知道是第幾條數(shù)據(jù)請(qǐng)求失敗了,
因?yàn)槲倚枰涗涍@條失敗記錄的 extension_number 的值

回答
編輯回答
安淺陌

如果是這樣的話,簡單的方法就是,你在 while 前創(chuàng)建一個(gè)空的數(shù)組 $errorArr 然后在 while 里面將每個(gè)報(bào)錯(cuò)信息寫進(jìn)去,對(duì)應(yīng)的索引就是對(duì)應(yīng)的報(bào)錯(cuò)信息。

2017年2月26日 10:40