ahmed Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 Интересный приемчик.В плане надежности - недопущения несанкционированного ресайза - это, в отличие от первого способа этой темы, должно работать очень даже правильно.А в плане всего остального, ИМХО, это классический пример того, как нельзя делать. Должно быть, Вы решили пошутить... Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 6 апреля, 2017 Автор Жалоба Поделиться Опубликовано 6 апреля, 2017 (изменено) Интересный приемчик.В плане надежности - недопущения несанкционированного ресайза - это, в отличие от первого способа этой темы, должно работать очень даже правильно.А в плане всего остального, ИМХО, это классический пример того, как нельзя делать. Должно быть, Вы решили пошутить... а что вас не устраивает? токены всех запрашиваемых изображений пишутся в сессию, если есть запрос к ресайзу используем сессии, если нет просто чистим их ну да, тут ведь вопрос еще с выгрузками... надо подумать) Изменено 6 апреля, 2017 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 6 апреля, 2017 Автор Жалоба Поделиться Опубликовано 6 апреля, 2017 (изменено) для данного метода остается только хранить токены в базе, но проверка на существование файла скорее всего будет отрабатывать быстрее и не требует дополнительных усложнений и ресурсов Изменено 6 апреля, 2017 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
ahmed Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 а что вас не устраивает? токены всех запрашиваемых изображений пишутся в сессию Как раз это и не устраивает.Посмотрим на постейшую типовую ситуацию, когда, например, сайт стабильно работает, товары более-менее постоянны, изображения товаров давно не обновлялись, и все изображения нужных размеров давно сгенерированы.Как Вы правильно заметили, "токены всех запрашиваемых изображений пишутся в сессию", то есть при открытии посетителем, например, страницы категории, в сессию запишутся пару десятков токенов. При открытии другой категории - еще пару десятков. Если на сайте много товаров - сессия начнет пухнуть от совершенно бесполезных данных. Такое я и называю классическим примером того, как делать нельзя и за что программиста надо бить долго и сильно. Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 6 апреля, 2017 Автор Жалоба Поделиться Опубликовано 6 апреля, 2017 (изменено) Сессии при каждом запросе очищаются их количество в одном запросе ограничивается количеством картинок на странице. Как раз именно в этом проблем совсем нет Вы очень не внимательны. Сказывается непреодолимое желание найти ошибку там где ее может не быть Изменено 6 апреля, 2017 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
ahmed Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 Да, упустил этот момент. Значит, мое утверждение "сессия начнет пухнуть" - преувеличение.Но остается другое - в приведенном мной примере при каждом вызове index.php Вы очищаете токены в сессии и тут же записываете их снова. Каждый раз наполняете и очищаете сессию данными, которые совершенно не нужны в работе. Есть и более интересный момент. Нередко на сайте используются одни размеры изображений товара, при выгрузке на Яндекс маркет - другие. В этом случае Ваш метод, насколько я понимаю, приведет к тому, что URL-ы картинок, которые пойдут в Яндекс маркет, окажутся битыми. Сомневаюсь, что кому-то из сайтовладельцев это понравится... Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 6 апреля, 2017 Автор Жалоба Поделиться Опубликовано 6 апреля, 2017 (изменено) Есть и более интересный момент. Нередко на сайте используются одни размеры изображений товара, при выгрузке на Яндекс маркет - другие. В этом случае Ваш метод, насколько я понимаю, приведет к тому, что URL-ы картинок, которые пойдут в Яндекс маркет, окажутся битыми. Сомневаюсь, что кому-то из сайтовладельцев это понравится... именно это я имею ввиду в качестве недочета, но есть решение - для выгрузки все же подставлять токен в гет. в этом случае все будет работать как часы. public function resize_modifier($filename, $width=0, $height=0, $set_watermark=false, $s=true) { $resized_filename = $this->image->add_resize_params($filename, $width, $height, $set_watermark); $resized_filename_encoded = $resized_filename; if(substr($resized_filename_encoded, 0, 7) == 'http://') $resized_filename_encoded = rawurlencode($resized_filename_encoded); $resized_filename_encoded = rawurlencode($resized_filename_encoded); if($s) { $token = $this->config->token($resized_filename); if(empty($_SESSION['images_tokens']) || !in_array($token, $_SESSION['images_tokens'])) $_SESSION['images_tokens'][] = $token; } return $this->config->root_url.'/'.$this->config->resized_images_dir.$resized_filename_encoded.(!$s?'?'.$this->config->token($resized_filename):''); } <?php session_start(); require_once('../api/Simpla.php'); $filename = $_GET['file']; $token = $_GET['token']; $simpla = new Simpla(); if(!empty($token)) { if(!$simpla->config->check_token($filename, $token)) exit('bad token'); } else { $token = $simpla->config->token($filename); if(empty($_SESSION['images_tokens']) || !in_array($token, $_SESSION['images_tokens'])) exit('bad token'); } $resized_filename = $simpla->image->resize($filename); if(is_readable($resized_filename)) { header('Content-type: image'); print file_get_contents($resized_filename); } if($p->image) print "<picture>".$simpla->design->resize_modifier($p->image, 200, 200, false, false)."</picture> "; не совсем изящно постоянно юзать сессию в тех случаях когда они уже не нужны, но вариант рабочий Изменено 6 апреля, 2017 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
ahmed Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 именно это я имею ввиду в качестве недочета, но есть решение - для выгрузки все же подставлять токен в гет. в этом случае все будет работать как часы. <?php session_start(); require_once('../api/Simpla.php'); $filename = $_GET['file']; $token = $_GET['token']; $simpla = new Simpla(); if(isset($token)) { if(!$simpla->config->check_token($filename, $token)) exit('bad token'); } else { $token = $simpla->config->token($filename); if(empty($_SESSION['images_tokens']) || !in_array($token, $_SESSION['images_tokens'])) exit('bad token'); } $resized_filename = $simpla->image->resize($filename); if(is_readable($resized_filename)) { header('Content-type: image'); print file_get_contents($resized_filename); } [/code] [code=auto:0]if($p->image) print "<picture>".$simpla->design->resize_modifier($p->image, 200, 200)."?".$simpla->config->token($p->image)."</picture> "; не совсем изящно постоянно юзать сессию в тех случаях когда они уже не нужны, но вариант рабочий Я бы оценил так:1. Совсем не изящно постоянно юзать сессию в тех случаях когда они уже не нужны.2. Совсем не изящно в одних случаях использовать токен, в других нет - выходит непонятно почему излишнее усложнение, только пользователя путать.3. Вариант полностью не рабочий. В нем с ходу видна детская ошибка. Надо объяснять подробнее или сами найдете? Когда он будет рабочим хотя бы частично, то можно будет перейти в вопросу о том, все ли в этом методе работает "как часы"... Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 6 апреля, 2017 Автор Жалоба Поделиться Опубликовано 6 апреля, 2017 (изменено) после вашего варианта с проверкой файла на наличие при каждом запросе не вам судить об изящности и оценивать. в моем примере сессия используется по назначению, просто мне бы конечно хотелось бы найти вариант более простой. Когда лично у вас будет больше фантазии и примеров на данную тему, кроме как использовать давно избитый вариант, тогда и можно будет вести с вами дальнейшую беседу. а на данный момент мой интерес к вашему мнению исчерпан потому как я предложил вам обсудить а не ставить оценки, вы тут не в качестве жури. Как минимум я предложил 2 варианта реализации, от вас я не видел ничего большего кроме оценок чужой работы. Пожалуй это повод усомнится в вашей компетенции. Изменено 6 апреля, 2017 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
ahmed Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 Не очень понял, к чему Вы перешли на личности вместо конструктивного обсуждения.Главным в моем последнем сообщении был пункт 3. Вариант полностью не рабочий. В нем с ходу видна детская ошибка. Надо объяснять подробнее или сами найдете? В нем, среди прочего, содержался вполне конкретный вопрос, на который Вы ответить не пожелали. Я ожидал, что Вы за пару минут найдете и исправите ошибку и мы бы продолжили по существу. В крайнем случае я всегда готов разъяснить детали. Но если Вы не можете или не хотите, то не смею настаивать... Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 6 апреля, 2017 Автор Жалоба Поделиться Опубликовано 6 апреля, 2017 (изменено) Не очень понял, к чему Вы перешли на личности вместо конструктивного обсуждения.Главным в моем последнем сообщении был пункт 3. Вариант полностью не рабочий. В нем с ходу видна детская ошибка. Надо объяснять подробнее или сами найдете? В нем, среди прочего, содержался вполне конкретный вопрос, на который Вы ответить не пожелали. Я ожидал, что Вы за пару минут найдете и исправите ошибку и мы бы продолжили по существу. В крайнем случае я всегда готов разъяснить детали. Но если Вы не можете или не хотите, то не смею настаивать... личность в данном случае играет роль (почему то я убежден в том что я говорил только о ваших профессиональных качествах), я объяснил почему - от вас нет конструктивного обсуждения, потому я сомневаюсь стоит ли с вами дальше вести обсуждение. вы пишите- вариант полностью не рабочий.- надо объяснять подробнее или сами найдете?- В нем с ходу видна детская ошибка - особо мне нравится, есть ли смысл вести с вами беседу дальше хотя бы после этого, я очень ранимый) Вот для чего мне отгадывать что вы имеете ввиду? Или мне надо писать вижу ли я ошибку - нет не вижу. Вопрос в другом - если вы ее видите почему бы сразу не написать в чем суть ошибки. Потому как я убежден что вариант 100% рабочий. Есть замечания - раскройте свою мысль максимально доходчиво для того что бы мне не приходилось искать тут философский смысл. Изменено 6 апреля, 2017 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 6 апреля, 2017 Автор Жалоба Поделиться Опубликовано 6 апреля, 2017 Не очень понял, к чему Вы перешли на личности вместо конструктивного обсуждения.Главным в моем последнем сообщении был пункт 3. Вариант полностью не рабочий. В нем с ходу видна детская ошибка. Надо объяснять подробнее или сами найдете? В нем, среди прочего, содержался вполне конкретный вопрос, на который Вы ответить не пожелали. Я ожидал, что Вы за пару минут найдете и исправите ошибку и мы бы продолжили по существу. В крайнем случае я всегда готов разъяснить детали. Но если Вы не можете или не хотите, то не смею настаивать... ко всему прочему пару постов назад вы тоже видели ошибку там где ее нет, потому относится к вашим комментариям я не могу срьезно Цитата Ссылка на сообщение Поделиться на другие сайты
ahmed Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 Или мне надо писать вижу ли я ошибку - нет не вижу.Судя по тому, что Вы изменили пост #78, ошибку Вы увидели.Вопрос в другом - если вы ее видите почему бы сразу не написать в чем суть ошибки.Чтобы Вы нашли ее самостоятельно. Тем более, что она, как я отметил, детская и видна сразу (если, конечно, хоть немного стараться ее увидеть). Еще цель была в том, чтобы Вы подумали лишний раз, прежде чем писать самонадеянные утверждения типаПотому как я убежден что вариант 100% рабочий.Есть замечания - раскройте свою мысль максимально доходчиво для того что бы мне не приходилось искать тут философский смысл.Я считаю, что сообщил Вам очень доходчиво, что ошибка примитивная и лежит на поверхности. Извините, не ожидал, что спец Вашей квалификации не найдет такой простой ошибки через пару минут... Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 Еще раз будет такое поведение - будешь в очередной раз забанен.Если есть ошибка - пиши конкретно, или молчи в тряпочку...ПОСЛЕДНЕЕ предупреждение. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 Еще раз будет такое поведение - будешь в очередной раз забанен.Если есть ошибка - пиши конкретно, или молчи в тряпочку...ПОСЛЕДНЕЕ предупреждение. Лучше не банить а дать какое то ограничение (например: 1 сообщение в день)тогда будет писать больше конкретики и меньше воды в постах... Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 К сожалению, мои права позволяют мне только запретить постинг.Ограничение - это было бы здорово. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 6 апреля, 2017 Жалоба Поделиться Опубликовано 6 апреля, 2017 +1 Цитата Ссылка на сообщение Поделиться на другие сайты
ahmed Опубликовано 7 апреля, 2017 Жалоба Поделиться Опубликовано 7 апреля, 2017 (изменено) Если есть ошибка - пиши конкретно...Спасибо, замечание правильное, постараюсь впредь конкретнее. 1. На настоящий момент имеем: сначала было решение из #71. Потом обнаружились недостатки при работе с Ямаркет.2. Обнаруженный недостатки подправили в #78 так: в выгрузке писать токены как ранее. Уже само по себе решение выглядит неправильно и неестественно - задача стоит изначально, чтоб токен убрать, а теперь выходит, будет убирать, но не везде.3. Теперь поговорим о появлении картинок в поисковиках. В стандартном шаблоне Simpla product.tpl есть такой хорошо известный код<a href="{$product->image->filename|resize:800:600:w}" class="zoom" rel="group"><img src="{$product->image->filename|resize:300:300}" alt="{$product->product->name|escape}" /></a>который порождает HTML типа<a href="http://site.ru/files/products/Samsung-Galaxy-S-II.800x600w.jpg" class="zoom" rel="group"><img src="http://site.ru/files/products/Samsung-Galaxy-S-II.300x300.jpg" alt=""></a>Так вот, при предложенном способе, при сканировании сайта поисковиком имеем риск того, что ссылка href="http://site.ru/files/products/Samsung-Galaxy-S-II.800x600w.jpg" окажется битой. Ссылка будет нормальной лишь тогда, если к моменту сканирования картинка создана. А есть немало ситуаций, когда такой картинки не будет. А битая ссылка для поисковика - совсем не хорошо. А в реальности у владельца сайта будет так - часть картинок поисковиком индексировались нормально, часть - битые. И простому пользователю понять, почему так произошло и как исправить, будет ох как проблематично... Изменено 7 апреля, 2017 пользователем ahmed Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 7 апреля, 2017 Автор Жалоба Поделиться Опубликовано 7 апреля, 2017 (изменено) Верно, может быть такая ситуация. Последний метод не годится Изменено 7 апреля, 2017 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
AFI Опубликовано 11 июля, 2017 Жалоба Поделиться Опубликовано 11 июля, 2017 Добрый день! Подскажите, на одном сайте доработка работает, а на другом нет. Предполагяю связано это с тем, что для товара есть 2 дефолтных изображения(1 оригинал, 1 оригинал, но сжатый). Выводится на сайте это так {if $product->image->filename_compressed} <a href="{$product->image->filename_compressed|resize:2000:2000:w}" class="zoom" rel="group" data-lightbox="product-images"> <img src="{$product->image->filename_compressed|resize:500:500}" alt="{$product->name|escape}"> </a> {else} <a href="{$product->image->filename|resize:2000:2000:w}" class="zoom" rel="group" data-lightbox="product-images"> <img src="{$product->image->filename|resize:500:500}" alt="{$product->name|escape}"> </a> {/if} Где и что поправить, что бы он заработал? Цитата Ссылка на сообщение Поделиться на другие сайты
starcat Опубликовано 13 июля, 2017 Жалоба Поделиться Опубликовано 13 июля, 2017 В стандарной симпле адрес изображения имеет вот такой адре:http://simpla/files/products/Samsung-Galaxy-Mini-S5570.300x300.jpg?72fa7cbe766923a198b8ad7e132e5e9f Задача получить адрес без $token-наhttp://simpla/files/products/Samsung-Galaxy-Mini-S5570.300x300.jpg но при это запретить произвольную нарезку изображений тех размеров которые на заданы в настройках сайта. Размеры изображений задаются через шаблон. Потому можно запомнить необходимые размеры в настройках. в Design.php добавляем код $size = ($width?$width:0).'x'.($height?$height:0).($set_watermark?"w":''); $image_sizes = array(); if($this->settings->image_sizes) $image_sizes = explode('|',$this->settings->image_sizes); if(!in_array($size, $image_sizes)){ $image_sizes[] = $size; $this->settings->image_sizes = implode('|',$image_sizes); } В Image.php добавляем код $size = ($width?$width:0).'x'.($height?$height:0).($set_watermark?"w":''); $image_sizes = array(); if($this->settings->image_sizes) $image_sizes = explode('|',$this->settings->image_sizes); if(!in_array($size, $image_sizes)){ header("http/1.0 404 not found"); exit(); } в resize/resize.php /* if(!$simpla->config->check_token($filename, $token)) exit('bad token'); */ Более подробно смотрите на видео Смотрите другие доработки в моем профиле Хотите сказать спасибо? Вам сюда Спасибо!!! Воспользовался вашей доработкой, вроде все работает, но у меня почему то во всех категориях не появляется первая картинка продукции, помогите с этим явлением разобраться, не бесплатно конечно же Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 8 августа, 2017 Жалоба Поделиться Опубликовано 8 августа, 2017 Если вопрос только в возникающих дублях в яндекс вебмасетере, можно прописать в роботсе Disallow: /files/products/*?*все хвосты станут закрытыми, а по прямой ссылке без токена будет отдаваться 200 ОК. Цитата Ссылка на сообщение Поделиться на другие сайты
starcat Опубликовано 11 августа, 2017 Жалоба Поделиться Опубликовано 11 августа, 2017 Если вопрос только в возникающих дублях в яндекс вебмасетере, можно прописать в роботсе Disallow: /files/products/*?*все хвосты станут закрытыми, а по прямой ссылке без токена будет отдаваться 200 ОК.Спасибо! Помогло!!! По моему очень хорошее решение и без всяких переделок) Цитата Ссылка на сообщение Поделиться на другие сайты
Ivan2016 Опубликовано 21 января, 2018 Жалоба Поделиться Опубликовано 21 января, 2018 (изменено) Сделал все по инструкции, исчезли после *.jpg символы.У меня сайт перенес на другой домен, исчезли картинки, но они все существуют в папке /files/products/ Что в моем случае можно сделать? Если точнее проблема оказалась,исчезают картинки, когда меняю тему на новую. И все-таки почему их невидно? http://eda-alko.ru/catalog/pod_privarku Изменено 21 января, 2018 пользователем Ivan2016 Цитата Ссылка на сообщение Поделиться на другие сайты
Плохиш Опубликовано 21 января, 2018 Жалоба Поделиться Опубликовано 21 января, 2018 Если точнее проблема оказалась, исчезают картинки, когда меняю тему на новую. И все-таки почему их невидно? Видимо, потому, что сменили тему. Например, в другой теме может быть неверно прописаны URL картинок. И еще может быть причин три десятка. Гадать можно долго... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.