Posted 22 февраля, 20195 yr comment_155434 кто знает как работает принцип кэширования картинок форума (включая картинки галереи)? есть проблема. 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 т.е. вообще не понятный смысл какой-то такого кэширования...когда и там фото и на локальном сервере копия кэшированная, но при удалении в источнике - фото перестает грузиться) но в кэше продолжает храниться. ВОобще дичь не понятная.
22 февраля, 20195 yr comment_155440 Весь кэш картинок скидывается в папку 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( ) );
22 февраля, 20195 yr comment_155452 Настройки Posting -> Remote images -> Serve images from local server -> Cache remote images -> Indefinitely
22 февраля, 20195 yr Author comment_155459 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 эксперимент?
22 февраля, 20195 yr comment_155466 Подпись к настройке гласит: Цитата Копия удалённого изображения будет загружена на ваш сервер и сохранена в течение указанного периода времени. Значит логика движка именно такая.
22 февраля, 20195 yr Author comment_155473 41 минуту назад, Respected сказал: Подпись к настройке гласит: Значит логика движка именно такая. значит остается всего лишь переloadить все страницы форума...с целью перекэшировать все фотки на всех страницах и картинки у меня в кармане)) гениально! тема закрыта
23 февраля, 20195 yr comment_155506 В 22.02.2019 в 17:58, sergey81 сказал: если я сейчас нажму -хранить вечно, значит кэш будет как грибы расти. сохранять будет все фотки которые есть на форуме. отлично. с этим понятно тоже.
25 февраля, 20195 yr Author comment_155559 В 23.02.2019 в 20:01, kgb сказал: пока все шуршит и не мазолит глаза в каталоге ./uploads/imageproxy/ а остальное - улучшение на ваш страх и риск. при моей системе - не стану этого делать. а если кому интересно... то кэширует абалденно)) каждая страница когда подгружается при просмотре для пользователей.. подтягивается сервером и заносится в кэш. так за сутки набирается до 2000 картинок в каталог прокси. по объеме пока все в рамках допустимого.растет - но по мегабайтно. благо фотки не 20 Мpx ))) в любом случае это лучше чем пользователи размещали ранее ссылки со сторонних серверов и там фотки удаляли и оставились якоря пустышки на страницах...без ответа и привета.
26 февраля, 20195 yr Author comment_155597 ну вот и очередной косяк. на кэшированные фотки не накладывает watermark.... прям писец. одно делаешь - другое вылазит. как заставить подтягивать водяной знак на каталог ./uploads/imageproxy/ ??????????
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.