<?php
set_time_limit(0);
ini_set('error_reporting', E_ALL);
ini_set('log_errors', '1');
ini_set('display_errors', '1');
$allUseragents = array(
'Googlebot',
'MSNBot',
'Mozilla/1.1 (compatible; MSPIE 2.0; Windows CE)',
'Mozilla/1.10 [en] (Compatible; RISC OS 3.70; Oregano 1.10)',
'Mozilla/1.22 (compatible; MSIE 1.5; Windows NT)',
'Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)',
'Mozilla/1.22 (compatible; MSIE 2.0d; Windows NT)',
'Mozilla/1.22 (compatible; MSIE 5.01; PalmOS 3.0) EudoraWeb 2',
'Mozilla/2.0 (compatible; MSIE 3.01; Windows 98)',
'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
'Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Opera 6.0 [en]',
'Mozilla/4.0 (compatible; MSIE 5.0; SunOS 5.9 sun4u; X11)',
'Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.03 [ru]',
'Mozilla/4.0 (compatible; MSIE 5.17; Mac_PowerPC)',
'Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)',
'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)',
'Mozilla/4.0 (compatible; MSIE 6.0; ; Linux armv5tejl; U) Opera 8.02 [en_US] Maemo browser 0.4.31 N770/SU-18',
//...
);
$links = array(
'/.jar',
'/.mclevel',
'/.mclevel_(NBT)_Map_Format',
'/.minecraft',
'/.name',
'//kill',
//...
);
reset($links);
$maxThreads = 10; // скачивать будем в десять потоков
$multicurlInit = curl_multi_init();
do {
while (@$active <= $maxThreads) {
@$active++;
if (count($links) == 0) {
break;
}
$k = key($links);
$link = $links[$k];
unset($k);
next($links);
$agent = $allUseragents[array_rand($allUseragents)];
$newThread = curl_init();
curl_setopt_array($newThread, array(
CURLOPT_URL => 'http://minecraft.gamepedia.com' . $link,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 100,
CURLOPT_USERAGENT => $agent,
CURLOPT_FAILONERROR => false,
)
);
curl_multi_add_handle($multicurlInit, $newThread);
unset($newThread);
}
$curlMultiResult = curl_multi_exec($multicurlInit, $active);
do {
$result = curl_multi_info_read($multicurlInit);
if (!is_array($result)) {
break;
}
$info = curl_getinfo($result['handle']);
$html = curl_multi_getcontent($result['handle']);
file_put_contents(ltrim($link, "/") . ".html", $html);
// var_dump($html);
// echo "<pre>";
// print_r($info);
// flush();
// echo "</pre>";
curl_multi_remove_handle($multicurlInit, $result['handle']);
curl_close($result['handle']);
} while (true);
if (count($links) == 0 && $active == 0) {
break;
}
} while (true);
Хочу скачать страницы всех статей MinecraftWiki (9000+ статей).
И возникает два вопроса. Чем может быть ограничено число потоков ? И не выкинет ли меня сам сервер Вики по прошествии времени ?