Перейти к содержимому


Фото
- - - - -

Загрузка изображений с https серверов


Best Answer kossik , 29.06.2018 - 17:11

Решение нашлось!

 

1. Файл simpla\simpla_source\api\Design.php

Меняем строку

if(substr($resized_filename_encoded, 0, 7) == 'http://')

на

if(substr($resized_filename_encoded, 0, 7) == 'http://' || substr($resized_filename_encoded, 0, 8) == 'https://')

2. Файл simpla\simpla_source\simpla\ProductAdmin.php

Меняем строку

if(!empty($url) && $url != 'http://' && strstr($url,'/')!==false)

на

if(!empty($url) && $url != 'http://' && $url != 'https://' && strstr($url,'/')!==false)

3. Файл simpla\simpla_source\api\Image.php

Меняем строку

if(substr($source_file, 0, 7) == 'http://')

на

if(substr($source_file, 0, 7) == 'http://' || substr($source_file, 0, 8) == 'https://')

 

Все! Теперь изображения загружаются и из под админки и из БД, в случае импортированных товаров

Так же можно вместо проверки поставить вот так, например: preg_match("~^https?://~", $source_file)

Ну это по желанию, суть не меняется

Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
29 ответов в теме

#1 kossik

kossik
  • Пользователь
  • 36 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 28.06.2018 - 14:16

Добрый день.

Обнаружил, что изображения, ссылка на которые идет на https сервера не загружаются.

В этом случае функция resize вообще не запускается, так же как и не заходит в файл resize.php

 

Проблема в редиректе? Или в скрипте, который выводит изображения в шаблон?

 

Редирект в настоящее время выглядит вот так:

# Ресайз картинок на лету
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^files/products/(.+) resize/resize.php?file=$1&token=%{QUERY_STRING}
RewriteCond %{THE_REQUEST} ^GET\ (.*)files/products/(.*)\?([A-z0-9]*) 
RewriteRule ^files/products/(.+) resize/resize.php?file=%2&token=%3 [L,NE]

 



#2 kycher

kycher
  • Пользователь
  • 3 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x

Опубликовано 29.06.2018 - 13:48

Доброго дня


В cms simplacms в стандартной, даже последней версии, не загружаются
изображения товара через "загрузить из интернета" по url начинающимся с https://,
в базу данных пишется путь с https, фото не загружается в папку, те
происходит в функции которая отвечает за добавление товара где обработка
события по "add_image_url" или прерывание на передаче и обрезке url для
последующего сохранения файла и записи в базу имени изображения.


Обычные файлы поправить не получилось;( (simpla/ProductAdmin.php , simpla/design/html/product.tpl)

Предполагаю что дело вообще в обработчике, скорее всего в файле api/Request.php


в simpla/design/html/product.tpl есть строки описывающие изменение на https не помогло

 

// Или с URL $('#add_image_url').click(function() { $("<input class='remote_image' name=images_urls[] type=text value='http://'>").appendTo('div#add_image').focus().select(); });  

 




в simpla/ProductAdmin.php есть строки, тоже изменение не помогло.

 

// Загрузка изображений из интернета          if($images = $this->request->post('images_urls'))          { foreach($images as $url) { if(!empty($url) && $url != 'http://')             $this->products->add_image($product->id, $url); } } $images = $this->products->get_images(array('product_id'=>$product->id));  

 




Не загружаются url с https на картинку. Help! Спасибо за направление на путь истинный)

Изменено: kycher, 29.06.2018 - 13:48


#3 kossik

kossik
  • Пользователь
  • 36 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 29.06.2018 - 17:11

Решение нашлось!

 

1. Файл simpla\simpla_source\api\Design.php

Меняем строку

if(substr($resized_filename_encoded, 0, 7) == 'http://')

на

if(substr($resized_filename_encoded, 0, 7) == 'http://' || substr($resized_filename_encoded, 0, 8) == 'https://')

2. Файл simpla\simpla_source\simpla\ProductAdmin.php

Меняем строку

if(!empty($url) && $url != 'http://' && strstr($url,'/')!==false)

на

if(!empty($url) && $url != 'http://' && $url != 'https://' && strstr($url,'/')!==false)

3. Файл simpla\simpla_source\api\Image.php

Меняем строку

if(substr($source_file, 0, 7) == 'http://')

на

if(substr($source_file, 0, 7) == 'http://' || substr($source_file, 0, 8) == 'https://')

 

Все! Теперь изображения загружаются и из под админки и из БД, в случае импортированных товаров

Так же можно вместо проверки поставить вот так, например: preg_match("~^https?://~", $source_file)

Ну это по желанию, суть не меняется


Изменено: kossik, 29.06.2018 - 17:13


#4 Noxter

Noxter
  • Фрилансер
  • 64 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 29.06.2018 - 18:10

Забыли про ftp, решение можно упростить через фильтр валидатор.

#5 kossik

kossik
  • Пользователь
  • 36 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 29.06.2018 - 19:05

Забыли про ftp, решение можно упростить через фильтр валидатор.

Спасибо за подсказку! Отличный вариант, даже не подумал о нем.

filter_var($source_file, FILTER_VALIDATE_URL)



#6 Noxter

Noxter
  • Фрилансер
  • 64 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 29.06.2018 - 19:25

Спасибо за подсказку! Отличный вариант, даже не подумал о нем.
filter_var($source_file, FILTER_VALIDATE_URL)

Всё верно.

#7 Morfeus

Morfeus
  • Пользователь
  • 13 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 17.02.2019 - 19:48

Большое спасибо тебе мил человек (Kossik), все работает)



#8 Tarasbulba

Tarasbulba
  • Пользователь
  • 111 сообщений

Опубликовано 16.07.2020 - 17:48

Спасибо за подсказку! Отличный вариант, даже не подумал о нем.

filter_var($source_file, FILTER_VALIDATE_URL)

а куда валидатор вставлять в какой файл?



#9 krasafcheg

krasafcheg
  • Пользователь
  • 17 сообщений

Опубликовано 19.07.2020 - 01:10

Братцы куда filter_var($source_file, FILTER_VALIDATE_URL) добавлять



#10 phukortsin

phukortsin
  • Фрилансер
  • 1 108 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 19.07.2020 - 09:36

Лучше всего никуда не добавлять. Потому что если добавлять, то по-хорошему еще добавочно надо код переделывать существенно. Особых преимуществ не даст, но может создать проблемы, например, будет определять адрес 'ttttttt://example.com/' как валидный.



#11 krasafcheg

krasafcheg
  • Пользователь
  • 17 сообщений

Опубликовано 19.07.2020 - 09:40

Лучше всего никуда не добавлять. Потому что если добавлять, то по-хорошему еще добавочно надо код переделывать существенно. Особых преимуществ не даст, но может создать проблемы, например, будет определять адрес 'ttttttt://example.com/' как валидный.

тогда какое лекарство по добавлению фоток через https



#12 phukortsin

phukortsin
  • Фрилансер
  • 1 108 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 19.07.2020 - 09:45

Оно в теме и написано в #3.

 

Правда, работать будет не на всех серверах.

По-хорошему надо дорабатывать посущественнее, с использованием CURL. Но бесплатно такое вряд ли кто выложит...



#13 krasafcheg

krasafcheg
  • Пользователь
  • 17 сообщений

Опубликовано 20.07.2020 - 11:38

Оно в теме и написано в #3.

 

Правда, работать будет не на всех серверах.

По-хорошему надо дорабатывать посущественнее, с использованием CURL. Но бесплатно такое вряд ли кто выложит...

так и платного решения найти не могу, на 1 сайте лежит за 350 рублей, но там написано что за работоспособность не отвечают, может есть у кого хоть платный вариант.... ?



#14 alexivchenko

alexivchenko
  • Пользователь
  • 162 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 20.07.2020 - 13:14

Заменяем
В api/Image.php
...
// Если файл удаленный (http://), зальем его себе
if (preg_match("~^https?://~", $source_file)) {
...
В api/Design.php
...
if (preg_match("~^https?://~", $resized_filename_encoded)) {
$resized_filename_encoded = rawurlencode($resized_filename_encoded);
}
...
Плюс
Файл simpla\ProductAdmin.php

Меняем строку
if(!empty($url) && $url != 'http://' && strstr($url,'/')!==false)

На
if(!empty($url) && $url != 'http://' && $url != 'https://' && strstr($url,'/')!==false)

Оригинал: https://qna.habr.com/q/542206

Изменено: alexivchenko, 20.07.2020 - 13:15


#15 krasafcheg

krasafcheg
  • Пользователь
  • 17 сообщений

Опубликовано 21.07.2020 - 13:14

Заменяем
В api/Image.php
...
// Если файл удаленный (http://), зальем его себе
if (preg_match("~^https?://~", $source_file)) {
...
В api/Design.php
...
if (preg_match("~^https?://~", $resized_filename_encoded)) {
$resized_filename_encoded = rawurlencode($resized_filename_encoded);
}
...
Плюс
Файл simpla\ProductAdmin.php

Меняем строку
if(!empty($url) && $url != 'http://' && strstr($url,'/')!==false)

На
if(!empty($url) && $url != 'http://' && $url != 'https://' && strstr($url,'/')!==false)

Оригинал: https://qna.habr.com/q/542206

 

Alex спасибо за предложенное решение, можно поподробнее с api/Design.php, там два места с кодом http, сделал все по инструкции, пробовал менять с одном месте и в двух, эффекта загрузки нет, появляется пустая картинка ведущая на 404

Csb9OaqXThuI0SKRfwMOzQ.png



Заменяем
В api/Image.php
...
// Если файл удаленный (http://), зальем его себе
if (preg_match("~^https?://~", $source_file)) {
...
В api/Design.php
...
if (preg_match("~^https?://~", $resized_filename_encoded)) {
$resized_filename_encoded = rawurlencode($resized_filename_encoded);
}
...
Плюс
Файл simpla\ProductAdmin.php

Меняем строку
if(!empty($url) && $url != 'http://' && strstr($url,'/')!==false)

На
if(!empty($url) && $url != 'http://' && $url != 'https://' && strstr($url,'/')!==false)

Оригинал: https://qna.habr.com/q/542206

нет случаем файлов "под замену", с меня пиво =D



#16 alexivchenko

alexivchenko
  • Пользователь
  • 162 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 21.07.2020 - 13:26

Alex спасибо за предложенное решение, можно поподробнее с api/Design.php, там два места с кодом http, сделал все по инструкции, пробовал менять с одном месте и в двух, эффекта загрузки нет, появляется пустая картинка ведущая на 404
Csb9OaqXThuI0SKRfwMOzQ.png


нет случаем файлов "под замену", с меня пиво =D

https://github.com/p...Design.php#L213
Код на линиях 213 и 214 заменить
На
if (preg_match("~^https?://~", $resized_filename_encoded)) {
$resized_filename_encoded = rawurlencode($resized_filename_encoded);
}

Изменено: alexivchenko, 21.07.2020 - 13:28


#17 Noxter

Noxter
  • Фрилансер
  • 64 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.07.2020 - 13:40

https://github.com/p...Design.php#L213
Код на линиях 213 и 214 заменить
На
if (preg_match("~^https?://~", $resized_filename_encoded)) {
$resized_filename_encoded = rawurlencode($resized_filename_encoded);
}

Регулярка будет тяжелее, лучше не использовать.

#18 phukortsin

phukortsin
  • Фрилансер
  • 1 108 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 21.07.2020 - 14:01

Alex спасибо за предложенное решение, можно поподробнее с api/Design.php, там два места с кодом http, сделал все по инструкции, пробовал менять с одном месте и в двух, эффекта загрузки нет, появляется пустая картинка ведущая на 404

 

Решение, которое предложил alexivchenko, мало отличается от #3 в этой теме, поэтому получить от него какой-то положительный эффект очень маловероятно. Это как раз тот случай, когда "за работоспособность не отвечают", ибо оно по объективным причинам чаще не работает...



#19 Tarasbulba

Tarasbulba
  • Пользователь
  • 111 сообщений

Опубликовано 23.07.2020 - 15:17

на версии 2.1.5 не заработало.



#20 alexivchenko

alexivchenko
  • Пользователь
  • 162 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 23.07.2020 - 15:20

Странно, что у кого-то не работает...
Версия 2.3.8
Ставил на 4 сайта, работает загрузка при импорте, загрузка при добавлении из админ. панели.




0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых