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

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


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

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

Добрый день.

Обнаружил, что изображения, ссылка на которые идет на 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]

 

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

Доброго дня


В 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
Ссылка на сообщение
Поделиться на другие сайты
  • Решение

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

 

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
Ссылка на сообщение
Поделиться на другие сайты

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

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

filter_var($source_file, FILTER_VALIDATE_URL)

Ссылка на сообщение
Поделиться на другие сайты
  • 7 месяцев спустя...
  • 1 год спустя...

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

filter_var($source_file, FILTER_VALIDATE_URL)

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

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

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

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

Заменяем

В 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
Ссылка на сообщение
Поделиться на другие сайты

Заменяем

В 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

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

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

Csb9OaqXThuI0SKRfwMOzQ.png

 

 

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

https://github.com/pikusov/Simpla/blob/9fefafa38dc739b4348b4a2940cba8bc8e4363ed/api/Design.php#L213

Код на линиях 213 и 214 заменить

На

if (preg_match("~^https?://~", $resized_filename_encoded)) {

$resized_filename_encoded = rawurlencode($resized_filename_encoded);

}

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

https://github.com/pikusov/Simpla/blob/9fefafa38dc739b4348b4a2940cba8bc8e4363ed/api/Design.php#L213

Код на линиях 213 и 214 заменить

На

if (preg_match("~^https?://~", $resized_filename_encoded)) {

$resized_filename_encoded = rawurlencode($resized_filename_encoded);

}

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

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

 

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

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

Странно, что у кого-то не работает...

Версия 2.3.8

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

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

Странно, что у кого-то не работает...

Версия 2.3.8

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

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

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

Странно, что у кого-то не работает...

Версия 2.3.8

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

 

Если Вы посмотрите хоть чуть внимательно документацию, то уже не будет ничего странного:

https://php.ru/manual/function.fopen.html

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

 

Если Вы посмотрите хоть чуть внимательно документацию, то уже не будет ничего странного:

https://php.ru/manual/function.fopen.html

прочитал ничего не понял ))

 

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

кто нибудь помогите понять почему на 2.1.5 не работает допил https

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

прочитал ничего не понял ))

 

 

кто нибудь помогите понять почему на 2.1.5 не работает допил https

У меня нет архива 2.1.5 так бы подсказал

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

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

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

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

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

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

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

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

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

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