Jump to content

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


Go to solution Solved by kossik,

Recommended Posts

Добрый день.

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

 

Link to post
Share on other sites

Доброго дня


В 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! Спасибо за направление на путь истинный)
Edited by kycher
Link to post
Share on other sites
  • Solution

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

 

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)

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

Edited by kossik
Link to post
Share on other sites

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

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

filter_var($source_file, FILTER_VALIDATE_URL)

Link to post
Share on other sites
  • 7 months later...
  • 1 year later...

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

 

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

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

Link to post
Share on other sites

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

 

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

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

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

Link to post
Share on other sites

Заменяем

В 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

Edited by alexivchenko
Link to post
Share on other sites

Заменяем

В 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

Link to post
Share on other sites

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);

}

Edited by alexivchenko
Link to post
Share on other sites

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);

}

Регулярка будет тяжелее, лучше не использовать.
Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

Версия 2.3.8

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

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

Link to post
Share on other sites

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

Версия 2.3.8

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

 

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

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

Link to post
Share on other sites

 

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

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

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

 

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

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...