PHPマルチスレッドキャプチャWeb実装コード

2719 ワード

php言語自体がマルチスレッドをサポートしていないため、爬虫類プログラムの開発は効率的ではありません.この場合、Curl Multi Functionsを使用すると、複数のurlアドレスへの同時マルチスレッドアクセスが可能になります.Curl Multi Functionがこのように強力である以上、Curl Multi Functionsで同時マルチスレッドダウンロードファイルを書くことができますか?もちろん、以下に私のコードを示します.
コード1:取得したコードを直接ファイルに書き込む
 
  
$urls = array(
'http://www.sina.com.cn/',
'http://www.sohu.com/',
'http://www.163.com/'
); // URL

$save_to='/test.txt'; //

$st = fopen($save_to,"a");
$mh = curl_multi_init();

foreach ($urls as $i => $url) {
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
curl_setopt($conn[$i], CURLOPT_HEADER ,0);
curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);
curl_setopt($conn[$i], CURLOPT_FILE,$st); //
curl_multi_add_handle ($mh,$conn[$i]);
} //

do {
curl_multi_exec($mh,$active);
} while ($active); //

foreach ($urls as $i => $url) {
curl_multi_remove_handle($mh,$conn[$i]);
curl_close($conn[$i]);
} //

curl_multi_close($mh);
fclose($st);
?>

コード2:取得したコードを変数に入れてファイルに書き込む
 
  
$urls = array(
'http://www.sina.com.cn/',
'http://www.sohu.com/',
'http://www.163.com/'
);

$save_to='/test.txt'; //
$st = fopen($save_to,"a");

$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
curl_setopt($conn[$i], CURLOPT_HEADER ,0);
curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // ,
curl_multi_add_handle ($mh,$conn[$i]);
}

do {
curl_multi_exec($mh,$active);
} while ($active);

foreach ($urls as $i => $url) {
$data = curl_multi_getcontent($conn[$i]); //
fwrite($st,$data); // 。 , ,
} // ,

foreach ($urls as $i => $url) {
curl_multi_remove_handle($mh,$conn[$i]);
curl_close($conn[$i]);
}

curl_multi_close($mh);
fclose($st);
?>