そのため、約 3000 個のリンクを処理しています。curl_multi を使用してプロセスを高速化しています。一度に 20 の単純なプロセスを使用し、20 個すべてが終了するのを待って、さらに 20 個の方法を処理しましたが、特にこれらの 20 個のリンクの 1 つがダウンロードに永遠にかかる場合は、これは非効率的であることがわかっています。そのため、その URL からコンテンツを取得したらすぐにハンドルを追加/削除して、3000 個のリンクすべてを通過するループを作成する方法を知る必要があります。
私はこれらの基礎のいくつかを使用しています:
define('RUNATONCE', 20); // Links to process at a time
// My URL holding multi-dimensional array:
// This first dimension is about 1000 and the second dimension is 3
$allurls[0][0];
次のことができる必要があります。
1)ハンドルがいつ完了したかを確認し、ハンドルが属する多次元配列のURLを確認します
2) そのハンドルの内容を取得し、そのハンドルの内容が の一部であるかどうかに基づいてプロセスを割り当てます$allurls[0][0],$allurls[0][1]($allurls[0][2]それらのそれぞれに異なるプロセス)
$allurls3)すべてのリンクが処理されるまで、そのハンドルを削除し、別の URL を追加します。
4) 一定時間以上、たとえば 2 分以上かかった URL に対して手動でタイムアウトを処理します ( CURLOPT_CONNECTTIMEOUT&CURLOPT_TIMEOUTが curl_multi 環境で適切に機能しないため) (または、少なくともhttp: //curl.haxx.se/mail/curlphp-2008-06/0006.html ))、しかし、$allurlsその URL がタイムアウトしたかどうかを知る必要もあります...
これはちょっとした作業のように思えますが、これを知っている人にとっては、それほど多くの作業ではないはずです...具体的な方法が本当にわかりません...ありがとう。