Jump to content

кто знает как работает принцип кэширования картинок форума


sergey81
 Share

Recommended Posts

кто знает как работает принцип кэширования картинок форума (включая картинки галереи)?

есть проблема.

 

2.пользователи публикуют уже 8 лет на форуме фото с разных фотохранилищ типа radikal и прочих

radikal и другие - удаляют фото по мере их не активности. так если к фото не было в течении года обращений (запросов) то 

картинка удаляется на всегда.

 

я обратил внимание, что в разделе настроек хранилища /uploads/ есть раздел отвечающий за хранение кэшированных фото

которые система закидывает в каталог /uploads/imageproxy

т.е. судя по ссылкам на самой системе IPS, она подгружает фото с внешних сайтов в этот каталог кэша.

но при этом при удалении из первоисточника... фотки и в системе перестают отображаться!

тогда вопрос к чему эта вся муть...с кэшированием? 

и вот что удивительно...в кеше у меня много лежит фоток. т.е. видимо они сохраняются на всегда. но почему тогда в последующих

загрузках страниц...они не берутся из кэша? 

это первая заморочка... в принципе не жду ответа - просто разъяснений если кто в теме.

 

2.второй вопрос к специалистам unix.

стоит задача:

выгрузить все ссылки на внешние источники фото (адреса есть...т.е. 

img34.imageshack.us

s003.radikal.ru

и прочие...куда ссылаются адреса есть в полном списке)

при этом нужно в sql базе либо sqldump-е найти и выгрузить строчки с этими адресами

(адреса примерно выглядят следующим образом.. http://s018.radikal.ru/i523/1403/68/a46fc9633fe3.jpg )

это первая задача. как вырезать целиком адреса этих сайтов начиная от слова .radikal.ru заканчивая .jpg 

далее я хочу сформировать список в таблице и запустить скачивание всех их командой wget

wget http://s018.radikal.ru/i523/1403/68/a46fc9633fe3.jpg 

полученные (еще существующие на удаленных хостингах фото) залить в папку /uploads/montly-2019-02-22/

а потом исправить в базе ссылки соответствующих имен файлов на новый адрес .mysite.ru/uploads/montly-2019-02-22/a46fc9633fe3.jpg

 

вот такой бы скрипт хотелось бы написать... но я не программист, а админ(

В принципе задача очеень интересная. Это в принципе решение! его можно использовать почти всем кто работает с IPS 

т.е. нужно сливать с удаленных сайтов все фотки (в будущем и документы и прочее) на локальный хостинг.

 

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

поработать над проектиком. Я опишу примерно схему алгоритма. А нужно что бы человек владел grep/sed/awk/find/cat командами)

 

Если что пишите в личку. Там делать то час работы для хорошего  специалиста в командах bash. 

да и еще. на всякий случай...для наглядности кину ссылку того как на форуме отображает фото если оно на фотохостинге в оригинале и в кэше есть

 

https://mysite.ru/applications/core/interface/imageproxy/imageproxy.php?img=http://s59.radikal.ru/i165/1105/e8/e3099b8dbf41.jpg&key=7cfe9aca94451eef2dc84e32a00a4f39bf60fa43a5cfd87d6bbd5cdd31e87fb5

 

т.е. вообще не понятный смысл какой-то такого кэширования...когда и там фото и на локальном сервере копия кэшированная, но при удалении в источнике - фото перестает грузиться) но в кэше продолжает храниться. ВОобще дичь не понятная.

Link to comment
Share on other sites

Весь кэш картинок скидывается в папку datastore. Туда же он кидает и шаблоны. Вообще сами картинки хранятся в uploads, но я не понял зачем громоздить php файлы с кусками кода в папку на диск.

Например шаблон хранится в таком виде:

<?php

return <<<'VALUE'
"namespace IPS\\Theme;\nclass class_core_admin_promotion extends \\IPS\\Theme\\Template\n{\n\tpublic $cache_key = '';\n\tfunction activeBadge( $id, $text, $currentStatus, $ad ) {\n\t\t$return = '';\n\t\t$return .= <<<CONTENT\n\n\nCONTENT;\n\n$filter = \\IPS\\Request::i()->filter;\n$return .= <<<CONTENT\n\n\nCONTENT;\n\nif ( $currentStatus === -1 ):\n$return .= <<<CONTENT\n\n\t<span class='ipsBadge ipsBadge_negative'>\nCONTENT;\n\n$val = \"{$text}\"; $return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/span>\n\nCONTENT;\n\nelseif ( ( $ad['ad_end'] AND $ad['ad_end'] < time() ) OR ( $ad['ad_maximum_unit'] == 'i' AND $ad['ad_maximum_value'] > -1 AND $ad['ad_impressions'] >= $ad['ad_maximum_value'] ) OR ( $ad['ad_maximum_unit'] == 'c' AND $ad['ad_maximum_value'] > -1 AND $ad['ad_clicks'] >= $ad['ad_maximum_value'] )  ):\n$return .= <<<CONTENT\n\n\t<span class='ipsBadge ipsBadge_neutral' data-ipsTooltip title='\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'ad_nostatus_change', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n'>\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'disabled', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/span>\n\nCONTENT;\n\nelse:\n$return .= <<<CONTENT\n\n\t<span data-ipsStatusToggle>\n\t\t<a href=\"\nCONTENT;\n\n$return .= htmlspecialchars( \\IPS\\Http\\Url::internal( \"app=core&module=promotion&controller=advertisements&do=toggle&id=$id&status=0&filter={$filter}\", null, \"\", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );\n$return .= <<<CONTENT\n\" data-ipsTooltip title=\"\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'set_inactive', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n\" \nCONTENT;\n\nif ( $currentStatus !== 1 ):\n$return .= <<<CONTENT\nclass='ipsHide'\nCONTENT;\n\nendif;\n$return .= <<<CONTENT\n data-state=\"enabled\">\n\t\t\t<span class='ipsBadge ipsBadge_positive'>\n\t\t\t\t\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'enabled', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n\n\t\t\t<\/span>\n\t\t<\/a>\n\t\t<a href=\"\nCONTENT;\n\n$return .= htmlspecialchars( \\IPS\\Http\\Url::internal( \"app=core&module=promotion&controller=advertisements&do=toggle&id=$id&status=1&filter={$filter}\", null, \"\", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );\n$return .= <<<CONTENT\n\" data-ipsTooltip title=\"\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'set_active', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n\" \nCONTENT;\n\nif ( $currentStatus !== 0 ):\n$return .= <<<CONTENT\nclass='ipsHide'\nCONTENT;\n\nendif;\n$return .= <<<CONTENT\n data-state=\"disabled\">\n\t\t\t<span class='ipsBadge ipsBadge_negative'>\n\t\t\t\t\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'disabled', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n\n\t\t\t<\/span>\n\t\t<\/a>\n\t<\/span>\n\nCONTENT;\n\nendif;\n$return .= <<<CONTENT\n\nCONTENT;\n\n\t\treturn $return;\n}\n\n\tfunction adsenseHelp(  ) {\n\t\t$return = '';\n\t\t$return .= <<<CONTENT\n\n<div class=\"ipsPad\">\n\t<div class=\"ipsSpacer_bottom ipsSpacer_double\">\n\t\t<p class=\"ipsType_normal\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_blurb', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/p>\n\t<\/div>\n\t\n\t<div class=\"ipsSpacer_bottom ipsSpacer_double\">\n\t\t<h2 class=\"ipsType_sectionHead\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_login_header', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/h2>\n\t\t<p class=\"ipsType_normal\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_login_blurb', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/p>\n\t\t<a href='\nCONTENT;\n\n$return .= \\IPS\\Http\\Url::ips( \"docs\/secure-ads-adsense\" );\n$return .= <<<CONTENT\n' class=\"ipsButton ipsButton_normal\" target='_blank' rel=\"noopener\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_login_link', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/a>\n\t<\/div>\n\t\n\t<div class=\"ipsSpacer_bottom ipsSpacer_double\">\n\t\t<h2 class=\"ipsType_sectionHead\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_ajax_header', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );

 

Link to comment
Share on other sites

1 час назад, hawk2012 сказал:

Весь кэш картинок скидывается в папку datastore. Туда же он кидает и шаблоны. Вообще сами картинки хранятся в uploads, но я не понял зачем громоздить php файлы с кусками кода в папку на диск.

Например шаблон хранится в таком виде:

<?php

return <<<'VALUE'
"namespace IPS\\Theme;\nclass class_core_admin_promotion extends \\IPS\\Theme\\Template\n{\n\tpublic $cache_key = '';\n\tfunction activeBadge( $id, $text, $currentStatus, $ad ) {\n\t\t$return = '';\n\t\t$return .= <<<CONTENT\n\n\nCONTENT;\n\n$filter = \\IPS\\Request::i()->filter;\n$return .= <<<CONTENT\n\n\nCONTENT;\n\nif ( $currentStatus === -1 ):\n$return .= <<<CONTENT\n\n\t<span class='ipsBadge ipsBadge_negative'>\nCONTENT;\n\n$val = \"{$text}\"; $return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/span>\n\nCONTENT;\n\nelseif ( ( $ad['ad_end'] AND $ad['ad_end'] < time() ) OR ( $ad['ad_maximum_unit'] == 'i' AND $ad['ad_maximum_value'] > -1 AND $ad['ad_impressions'] >= $ad['ad_maximum_value'] ) OR ( $ad['ad_maximum_unit'] == 'c' AND $ad['ad_maximum_value'] > -1 AND $ad['ad_clicks'] >= $ad['ad_maximum_value'] )  ):\n$return .= <<<CONTENT\n\n\t<span class='ipsBadge ipsBadge_neutral' data-ipsTooltip title='\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'ad_nostatus_change', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n'>\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'disabled', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/span>\n\nCONTENT;\n\nelse:\n$return .= <<<CONTENT\n\n\t<span data-ipsStatusToggle>\n\t\t<a href=\"\nCONTENT;\n\n$return .= htmlspecialchars( \\IPS\\Http\\Url::internal( \"app=core&module=promotion&controller=advertisements&do=toggle&id=$id&status=0&filter={$filter}\", null, \"\", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );\n$return .= <<<CONTENT\n\" data-ipsTooltip title=\"\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'set_inactive', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n\" \nCONTENT;\n\nif ( $currentStatus !== 1 ):\n$return .= <<<CONTENT\nclass='ipsHide'\nCONTENT;\n\nendif;\n$return .= <<<CONTENT\n data-state=\"enabled\">\n\t\t\t<span class='ipsBadge ipsBadge_positive'>\n\t\t\t\t\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'enabled', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n\n\t\t\t<\/span>\n\t\t<\/a>\n\t\t<a href=\"\nCONTENT;\n\n$return .= htmlspecialchars( \\IPS\\Http\\Url::internal( \"app=core&module=promotion&controller=advertisements&do=toggle&id=$id&status=1&filter={$filter}\", null, \"\", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );\n$return .= <<<CONTENT\n\" data-ipsTooltip title=\"\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'set_active', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n\" \nCONTENT;\n\nif ( $currentStatus !== 0 ):\n$return .= <<<CONTENT\nclass='ipsHide'\nCONTENT;\n\nendif;\n$return .= <<<CONTENT\n data-state=\"disabled\">\n\t\t\t<span class='ipsBadge ipsBadge_negative'>\n\t\t\t\t\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'disabled', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n\n\t\t\t<\/span>\n\t\t<\/a>\n\t<\/span>\n\nCONTENT;\n\nendif;\n$return .= <<<CONTENT\n\nCONTENT;\n\n\t\treturn $return;\n}\n\n\tfunction adsenseHelp(  ) {\n\t\t$return = '';\n\t\t$return .= <<<CONTENT\n\n<div class=\"ipsPad\">\n\t<div class=\"ipsSpacer_bottom ipsSpacer_double\">\n\t\t<p class=\"ipsType_normal\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_blurb', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/p>\n\t<\/div>\n\t\n\t<div class=\"ipsSpacer_bottom ipsSpacer_double\">\n\t\t<h2 class=\"ipsType_sectionHead\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_login_header', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/h2>\n\t\t<p class=\"ipsType_normal\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_login_blurb', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/p>\n\t\t<a href='\nCONTENT;\n\n$return .= \\IPS\\Http\\Url::ips( \"docs\/secure-ads-adsense\" );\n$return .= <<<CONTENT\n' class=\"ipsButton ipsButton_normal\" target='_blank' rel=\"noopener\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_login_link', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );\n$return .= <<<CONTENT\n<\/a>\n\t<\/div>\n\t\n\t<div class=\"ipsSpacer_bottom ipsSpacer_double\">\n\t\t<h2 class=\"ipsType_sectionHead\">\nCONTENT;\n\n$return .= \\IPS\\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'google_adsense_ajax_header', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array(  ) );

 

вообще не в тему. дейтстор это временные файлы так сказать  работы системы. не об этом речь!

46 минут назад, kgb сказал:

Настройки Posting -> Remote images -> Serve images from local server -> Cache remote images -> Indefinitely

 

 

есть такая кнопка. сейчас стоит 7 дней. т.е. это означает картинки в кеше лежат 7 дней потом удаляются. отлично. с этим разобрались.

теперь дальше.

если я сейчас нажму -хранить вечно, значит кэш будет как грибы расти. сохранять будет все фотки которые есть на форуме. отлично. с этим понятно тоже.

теперь вопрос в лоб - если будет установлен срок жизни хранения удаленных фоток... есть гарантия что даже удаленные позже фотки в источнике, все равно из кэша будут подгружаться и отображаться на страницах форума? или точно никто не знает...и нужно проводить self эксперимент? 

Link to comment
Share on other sites

Подпись к настройке гласит:

Цитата

Копия удалённого изображения будет загружена на ваш сервер и сохранена в течение указанного периода времени.

Значит логика движка именно такая.

Link to comment
Share on other sites

41 минуту назад, Respected сказал:

Подпись к настройке гласит:

Значит логика движка именно такая.

значит остается всего лишь переloadить все страницы форума...с целью перекэшировать все фотки на всех страницах и картинки у меня в кармане)) 

гениально!

тема закрыта

Link to comment
Share on other sites

В 22.02.2019 в 17:58, sergey81 сказал:

если я сейчас нажму -хранить вечно, значит кэш будет как грибы расти. сохранять будет все фотки которые есть на форуме. отлично. с этим понятно тоже.

 

Link to comment
Share on other sites

В 23.02.2019 в 20:01, kgb сказал:

 

пока  все шуршит и не мазолит глаза в каталоге ./uploads/imageproxy/

а остальное - улучшение на ваш страх и риск. при моей системе - не стану этого делать.

а если кому интересно... то кэширует абалденно)) каждая страница когда подгружается при просмотре для пользователей..

подтягивается сервером и заносится в кэш. так за сутки набирается до 2000 картинок в каталог прокси.

по объеме пока все в рамках допустимого.растет - но по мегабайтно. благо фотки не 20 Мpx )))

в любом случае это лучше чем пользователи размещали ранее ссылки со сторонних серверов и там фотки удаляли и  оставились

якоря пустышки на страницах...без ответа и привета.

Link to comment
Share on other sites

ну вот и очередной косяк.

на кэшированные фотки не накладывает watermark....

прям писец. одно делаешь - другое вылазит.

как заставить подтягивать водяной знак на каталог ./uploads/imageproxy/  ??????????

 

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...