С PHP я создаю массив файла CSV, содержащий URL-адреса, в файлы, которые я хочу загрузить с помощью этой строки:
$urls = explode(',',file_get_contents('urls.csv'));
После этого я использую следующий блок кода.
foreach($urls as $url){ $fname = 'not important right now ;)' $fcon = fopen($fname,'w'); fwrite($fcon,file_get_contents($url)); fclose($fcon); }
Это отлично работает, он загружает все файлы в файл!
Но, к сожалению, это не так эффективно, как хотелось бы. Я хочу 2,3 или, возможно, 4 одновременных загрузки, чтобы сэкономить некоторое время. Как я могу это сделать?
Если у вас есть доступ к завиту, вы можете использовать curl_multi_exec . Сначала $urls
массив $urls
в группы, сколько вы хотите выполнить одновременно, а затем обрабатывайте каждую группу с помощью curl_multi_exec
.
$all_urls = ['http://www.google.com', 'http://www.yahoo.com', 'http://www.bing.com', 'http://www.twitter.com', 'http://www.wikipedia.org', 'http://www.stackoverflow.com']; $chunked_urls = array_chunk($all_urls,3); //chunk into groups of 3 foreach($chunked_urls as $i => $urls) { $handles = []; $mh = curl_multi_init(); foreach($urls as $url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $ch); $handles[] = $ch; } // execute all queries simultaneously, and continue when all are complete $running = null; do { curl_multi_exec($mh, $running); } while ($running); foreach($handles as $handle) { file_put_contents("/tmp/output",curl_multi_getcontent($handle),FILE_APPEND); curl_multi_remove_handle($mh, $handle); } curl_multi_close($mh); print "Finished chunk $i\n"; }