Здравствуйте.
При парсинге, бывает, изображение сохраняется частично загруженное, т.е половина картинки - серый фон.
Проблему решаю с помощью sleep(1).
Есть ли иные способы удостовериться, что изображение полностью прогрузилось перед скачиванием?
Спасибо.
Метод получения данных:
public function parseProduct(array $page)
{
$this->page = $page;
foreach ($this->page as $item) {
$phpQuery = phpQuery::newDocument($item->getBody()->getContents());
$catalog = $phpQuery->find('.img_big_img');
$re = '~<td>Артикул: <span.*?">(?<articul>.*?)</span>.*?<td>Наименование: <span.*?">(?<name>.*?)</span>.*?<td>Цена: <span.*?">(?<price>.*?)</span>~s';
preg_match_all($re, $phpQuery, $matches, PREG_SET_ORDER, 0);
$imageExtension = pathinfo(pq($catalog)->attr('src'), PATHINFO_EXTENSION );
for($i = 0; $i < count($matches); $i++){
$productDataArr[] = [
'imageSrc' => pq($catalog)->attr('src'),
'imageName' => $matches[$i]['name'],
'productPrice' => $matches[$i]['price'],
'productArticul' => 'БЧ' . $matches[$i]['articul'],
'imageExtension' => $imageExtension,
];
}
}
return $productDataArr;
}
Сохранение:
public function saveProduct($imageDir, array $imageInfo)
{
if (!file_exists('cover/' . $imageDir)) {
mkdir('cover/' . $imageDir, 0777, true);
}
foreach ($imageInfo as $item) {
copy($item['imageSrc'], 'cover/' . $imageDir . '/' . Helper::transliterate($item['productArticul']) . '.' . $item['imageExtension']);
// sleep(rand(2, 4));
}
// $this->saveProductDataToExcel($imageInfo, $imageDir);
}