Перейти к содержанию
Официальный форум поддержки Simpla

Пропадают фото товара при авто-подборе.


Перейти к решению Решено Kors,

Рекомендуемые сообщения

Странная штука, пропадают иногда сразу, иногда на следующий день. Пропадает, всмысле, на странице товара она не открывается, буд-от кто-то с директории грохнул. Сначала думал, что симпла хранит только хотлинки, так ведь она их скачивает. Ещё рассматривал вариант, что при авто-подборке получается дубль, но все равно картинка отображалась ведь. Какие есть предположения?

Спасибо!

Ссылка на сообщение
Поделиться на другие сайты

Странная штука, пропадают иногда сразу, иногда на следующий день. Пропадает, всмысле, на странице товара она не открывается, буд-от кто-то с директории грохнул. Сначала думал, что симпла хранит только хотлинки, так ведь она их скачивает. Ещё рассматривал вариант, что при авто-подборке получается дубль, но все равно картинка отображалась ведь. Какие есть предположения?

Спасибо!

а сами фото проверяли? они есть в директории? в админке открывает?

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

а сами фото проверяли? они есть в директории? в админке открывает?

В админке, тоже не открывает. Но в папке фото лежит.

Если открывать без параметров, пишет, как и должен "Bad token".

Через {debug} имя файла верное. Firebug говорит "не удается загрузить указанный url".

Путь до файла верный. (соседние фото рядом открываются без проблем).

Права на все фото "rwxrwxrwx". Имя файла вменяемое.

Папку /compiled/ очистил, кеш браузеров чист.

Проблему заметил и на reg.ru и ihc.ru. (вроде, хостер не при чем)

Изменено пользователем mikeevstropov
Ссылка на сообщение
Поделиться на другие сайты

Есть!

Я был не прав. Проблемы в имени файла.

Символ "|" в имени кодируется как "_%7C_".

Но этот символ в файле сохраняется, как нижний дефис.

Однако, не заметил сразу.

 

Странно, почему проблема возникала через какое-то время.

Еще странно, почему api записывает в базу и имя файла разные строки.

Теперь осталось найти где происходит кодирование спец-символов.

Не думаю, что проблемы могут быть только в этом символе.

 

Наверно, тут происходит преобразование в имени файла. (api/Image.php)

private function correct_filename($filename)
{
	$ru = explode('-', "А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я"); 
	$en = explode('-', "A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch---Y-y---E-e-YU-yu-YA-ya");

 	$res = str_replace($ru, $en, $filename);
	$res = preg_replace("/[\s]+/ui", '-', $res);
	$res = preg_replace("/[^a-zA-Z0-9\.\-\_]+/ui", '', $res);
 	$res = strtolower($res);
 	return $res;  
}

Используется функция выше при загрузке изображения. (api/Image.php)

public function upload_image($filename, $name)
{
	// Имя оригинального файла
	$name = $this->correct_filename($name);
	$uploaded_file = $new_name = pathinfo($name, PATHINFO_BASENAME);
	$base = pathinfo($uploaded_file, PATHINFO_FILENAME);
	$ext = pathinfo($uploaded_file, PATHINFO_EXTENSION);
	
	if(in_array(strtolower($ext), $this->allowed_extentions))
	{			
		while(file_exists($this->config->root_dir.$this->config->original_images_dir.$new_name))
		{	
			$new_base = pathinfo($new_name, PATHINFO_FILENAME);
			if(preg_match('/_([0-9]+)$/', $new_base, $parts))
				$new_name = $base.'_'.($parts[1]+1).'.'.$ext;
			else
				$new_name = $base.'_1.'.$ext;
		}
		if(move_uploaded_file($filename, $this->config->root_dir.$this->config->original_images_dir.$new_name))			
			return $new_name;
	}
	return false;
}

А вот тут, вроде бы, инициация загрузки. (simpla/ProductAdmin.php)

// Загрузка изображений из интернета и drag-n-drop файлов
if($images = $this->request->post('images_urls'))
{
	foreach($images as $url)
	{
		// Если не пустой адрес и файл не локальный
		if(!empty($url) && $url != 'http://' && strstr($url,'/')!==false)
 			$this->products->add_image($product->id, $url);
 		elseif($dropped_images = $this->request->files('dropped_images'))
  		{
 			$key = array_search($url, $dropped_images['name']);
		 	if ($key!==false && $image_name = $this->image->upload_image($dropped_images['tmp_name'][$key], $dropped_images['name'][$key]))
	  	   				$this->products->add_image($product->id, $image_name);
		}
	}
}

Если кто знает, что тут можно поправить, буду признателен. =)

Изменено пользователем mikeevstropov
Ссылка на сообщение
Поделиться на другие сайты
  • Решение

На демо сайте пробовал задать товару файл со стороннего ресурса как http://site.ru/temp/dom|dom.gif

Символ "|" в имени  преобразуется в "%7C".

Все прекрасно загружается и отображается, работает как обычно.

 

Если не нравится изменение в имени, меняйте по-своему в api/Image.php ...

Ссылка на сообщение
Поделиться на другие сайты

На демо сайте пробовал задать товару файл со стороннего ресурса как http://site.ru/temp/dom|dom.gif

Символ "|" в имени  преобразуется в "%7C".

Все прекрасно загружается и отображается, работает как обычно.

 

Если не нравится изменение в имени, меняйте по-своему в api/Image.php ...

Спасибо! Навели на мысль!

 

Все дело в том, что я работаю так, сливаю с сервака файлы, пакованные в tar делаю правки, и гружу обратно.

У меня винда. При распаковке, символ "|", как недопустимый, ось преобразует в "_".

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...