Скачивает пустые картинки!
Устал рабирался скачивает пустые картинки парсер и все тут как не тыкал так понять не смог почему! Function:
function _batchDownload(array $urls, &$stats = array()) {
$mh = curl_multi_init();
$chs = array();
$fds = array();
$now = microtime(true);
foreach ($urls as $url => $tmp_file) {
$stats[$url] = array(
'started' => $now,
'finished' => $now,
'size' => null,
);
$fd = @fopen($tmp_file, 'wb');
if (!$fd) {
$result[$url] = null;
continue;
}
$fds[] = $fd;
$ch = curl_init();
$chs[] = $ch;
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_BINARYTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 30,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_WRITEFUNCTION => function($_, $chunk) use($fd) {
return fwrite($fd, $chunk);
},
));
curl_multi_add_handle($mh, $ch);
}
$result = array();
$prev_running = $running = null;
do {
curl_multi_exec($mh, $running);
if ($running != $prev_running) {
while (true) {
$info = curl_multi_info_read($mh);
if (!isset($info['handle']) || (!($ch = $info['handle']))) {
break;
}
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$tmp_file = $urls[$url];
if ($code != 200) {
if (file_exists($tmp_file)) {
unlink($tmp_file);
}
$tmp_file = null;
}
$stats[$url]['finished'] = microtime(true);
$stats[$url]['size'] = @filesize($tmp_file);
$result[$url] = $tmp_file;
}
$prev_running = $running;
}
} while ($running > 0);
foreach ($chs as $ch) {
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
curl_multi_close($mh);
foreach ($fds as $fd) {
fclose($fd);
}
return $result;
}
А вот собственно и исполняющий файл:
<?php
include 'multi.php';
$x = 'C:\srv\OpenServer\domains\conell-ru\published\publicdata\U0010117NEW\attachments\SC\products_pictures\1';
$folder = substr($x, 0,-1);
$file = file('C:\srv\OpenServer\domains\parsers\linkimg.csv');
$fl = array();
foreach ($file as $ms) {
$a = str_replace("\n", '', $ms);
$b = str_replace('"', "'", $a);
$fl[] = $b;
}
echo count($fl)."\n";
$param = array();
foreach ($fl as $dan){
$jpg = explode(';', $dan);
$away = $folder.str_replace("/", '', $jpg[1]).'.jpg';
$param[$jpg[0]]= $away;
}
$urls = array_chunk($param,1);
foreach ($urls as $key) {
if(_batchDownload($key) == true){
echo 'download complete'."\n";
}
else{
echo 'error complete'."\n";
}
}
Источник: Stack Overflow на русском