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 т.е. вообще не понятный смысл какой-то такого кэширования...когда и там фото и на локальном сервере копия кэшированная, но при удалении в источнике - фото перестает грузиться) но в кэше продолжает храниться. ВОобще дичь не понятная. Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/ Share on other sites Больше вариантов
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( ) ); Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/?&do=findComment&comment=155440 Share on other sites Больше вариантов
22 февраля, 20195 yr comment_155452 Настройки Posting -> Remote images -> Serve images from local server -> Cache remote images -> Indefinitely Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/?&do=findComment&comment=155452 Share on other sites Больше вариантов
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 эксперимент? Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/?&do=findComment&comment=155459 Share on other sites Больше вариантов
22 февраля, 20195 yr comment_155466 Подпись к настройке гласит: Цитата Копия удалённого изображения будет загружена на ваш сервер и сохранена в течение указанного периода времени. Значит логика движка именно такая. Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/?&do=findComment&comment=155466 Share on other sites Больше вариантов
22 февраля, 20195 yr Author comment_155473 41 минуту назад, Respected сказал: Подпись к настройке гласит: Значит логика движка именно такая. значит остается всего лишь переloadить все страницы форума...с целью перекэшировать все фотки на всех страницах и картинки у меня в кармане)) гениально! тема закрыта Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/?&do=findComment&comment=155473 Share on other sites Больше вариантов
23 февраля, 20195 yr comment_155506 В 22.02.2019 в 17:58, sergey81 сказал: если я сейчас нажму -хранить вечно, значит кэш будет как грибы расти. сохранять будет все фотки которые есть на форуме. отлично. с этим понятно тоже. Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/?&do=findComment&comment=155506 Share on other sites Больше вариантов
25 февраля, 20195 yr Author comment_155559 В 23.02.2019 в 20:01, kgb сказал: пока все шуршит и не мазолит глаза в каталоге ./uploads/imageproxy/ а остальное - улучшение на ваш страх и риск. при моей системе - не стану этого делать. а если кому интересно... то кэширует абалденно)) каждая страница когда подгружается при просмотре для пользователей.. подтягивается сервером и заносится в кэш. так за сутки набирается до 2000 картинок в каталог прокси. по объеме пока все в рамках допустимого.растет - но по мегабайтно. благо фотки не 20 Мpx ))) в любом случае это лучше чем пользователи размещали ранее ссылки со сторонних серверов и там фотки удаляли и оставились якоря пустышки на страницах...без ответа и привета. Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/?&do=findComment&comment=155559 Share on other sites Больше вариантов
26 февраля, 20195 yr Author comment_155597 ну вот и очередной косяк. на кэшированные фотки не накладывает watermark.... прям писец. одно делаешь - другое вылазит. как заставить подтягивать водяной знак на каталог ./uploads/imageproxy/ ?????????? Link to comment https://ipbmafia.ru/topic/21084-kto-znaet-kak-rabotaet-princip-keshirovaniya-kartinok-foruma/?&do=findComment&comment=155597 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.