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