Существует ошибка в OpenCart Framework версии 3.0.2.0,
Если есть файлы с именем файла, содержащие пробелы между ними, обработка и выполнение занимает слишком много времени
Например, рассмотрим
img = https: // DomainNameServer / изображение / каталог / pimages / SKU 081985
P80.jpg
<?php
set_time_limit(0);
ignore_user_abort(true);
public function addSubImages($images){
$Image =array();
foreach($images['img'] as $key => $img){
$headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
$headers[] = 'Connection: Keep-Alive';
$headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
$user_agent = 'php';
$process = curl_init($img); // http://localhost/bluemb/image/catalog/pimages/SKU 081985 P80.jpg
curl_setopt($process, CURLOPT_HTTPHEADER, $headers);
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_USERAGENT, $user_agent);
curl_setopt($process, CURLOPT_TIMEOUT, 1800);
curl_setopt($process, CURLOPT_CONNECTTIMEOUT, 0);
//curl_setopt($process, CURLOPT_CONNECTTIMEOUT, 1700);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
$return = curl_exec($process);
curl_close($process);
//return $return;
$filepath = pathinfo($img);
$dirname = DIR_IMAGE.'catalog/prod/';
if (!file_exists($dirname)) {
mkdir($dirname, 0755, true);
}
if (!empty($dirname)) {
$srcfile = $img;
$dstfile = DIR_IMAGE.'catalog/prod/'.$filepath['basename']; // /var/www/html/opencart/image/catalog/prod/SKU 081985 P80.jpg
$Image[] = 'catalog/prod/'.$filepath['basename']; //catalog/prod/SKU 081985 P80.jpg
copy(str_replace(" ","%20",$srcfile), $dstfile);
//file_put_contents($dstfile,$return);
}
else {
$Image = "";
}
}
return $Image;
}
С этими ниже функциями:
Изображения были сохранены в формате Corrupted / RAW с большей задержкой без пропускной способности file_put_contents($dstfile, $return);
Изображения были сохранены идеально с большей задержкой при правильной пропускной способности copy(str_replace(" ", "%20", $srcfile), $dstfile);
Изображения были сохранены в текстовом формате с большей задержкой и неправильной пропускной способностью
@copy($srcfile, $dstfile);
$content = file_get_contents($srcfile);
$fp = fopen($dstfile , "w+");
fwrite($fp, $content);
$Image = 'catalog/prod/'.$filepath['basename'];
fclose($fp);
curl_close($process);
copy(urlencode($srcfile), $dstfile);
Результаты:
Предупреждение: копия (https% 3A% 2F% 2Fwww.DomainNameServer.in% 2Fimage% 2Fcatalog% 2Fpimages% 2FSKU093126 +% 281% 29.jpg):
не удалось открыть поток: нет такого файла или каталога в
/var/www/html/opencart3/admin/model/account/apisync.php онлайн
264
copy(urldecode($srcfile), $dstfile);
Результаты:
Предупреждение: копия (https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1) .jpg): не удалось открыть поток: сбой HTTP-запроса! в /var/www/html/opencart3/admin/model/account/apisync.php онлайн 264
copy(str_replace('_','%20',$srcfile), $dstfile);
Результаты:
Предупреждение: Копия (https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1) .jpg):
не удалось открыть поток: HTTP-запрос не выполнен! в
/var/www/html/opencart3/admin/model/account/apisync.php онлайн
265
copy(str_replace('%20',' ',$srcfile), $dstfile);
ИЛИ ЖЕ
copy(str_replace('%20','_',$srcfile), $dstfile);
ИЛИ ЖЕ
copy(str_replace('%20','',$srcfile), $dstfile);
Результаты:
Предупреждение:
копия (https://www.DomainNameServer.in/image/catalog/pimages/SKU093126 (1) .jpg):
не удалось открыть поток: HTTP-запрос не выполнен! в
/var/www/html/opencart3/admin/model/account/apisync.php онлайн
265
При создании функциональности API из 10 000 продуктов только 1091 продукт сохраняется в базе данных, а остальные 8909 продуктов занимали 7 — 10 часов.
долго исполнять. Так как я установил лимит времени выполнения на бесконечность. Когда я проверил через 10 часов, все продукты были успешно сохранены.
Общее время съемки прямо пропорционально нет. имени файла изображения с пробелами
Экспорт нет. продукта зависит от имени файла изображения, содержащего пробелы.
В то время, когда я отлаживал три продукта с именем файла изображения с пробелами, это занимало 20 минут в полном порядке без addSubImages()
Функция потребовалось даже не одну секунду, чтобы выполнить
Существуют ли другие подходы к решениям, чтобы обойти этот сценарий?
Используйте этот код
Не используйте пространство
copy(str_replace("%20", "", $srcfile), $dstfile);
OR
copy(str_replace("%20", "_", $srcfile), $dstfile);
Увидеть https://www.w3schools.com/php/func_string_str_replace.asp
Других решений пока нет …