<?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)',
// ...
'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00',
'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.9.168 Version/11.51',
'Opera/9.80 (X11; Linux x86_64; U; en) Presto/2.2.15 Version/10.10',
'Opera/9.80 (X11; Linux x86_64; U; ru) Presto/2.2.15 Version/10.10',
'StackRambler',
'Yandex'
);
$links = array(
'/.jar',
'/.mclevel',
'/.mclevel_(NBT)_Map_Format',
'/.minecraft',
'/.name',
'//kill',
'/0.0.1',
// ...
'/Vaht',
'/Vandalism',
'/Vehicle',
// ...
); // все полученные ранее ссылки
$i = 0;
$maxThreads = 10; // скачивать будем в десять потоков
$multicurlInit = curl_multi_init();
do {
while (@$active <= $maxThreads) {
@$active++;
if (count($links) == 0) {
break;
}
$link = $links[$i++];
$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);
1) Начинает сохранять не с 1-го элемента массива ссылок.
2) Сохраняет страницы присваивая название других.
3) Иногда получаю это: The owner of this website (minecraft.gamepedia.com) has banned your access based on your browser's signature (18697c3f488206e8-ua31).
Где тут неладное кроется ?