Не грузятся картинки с postimage.org

Автор Kira, 05 мая 2018, 04:24:49

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Kira

05 мая 2018, 04:24:49 Последнее редактирование: 05 мая 2018, 14:14:00 от Kira
postimage.org подложил свинью. Загруженные туда картинки перестали грузиться, однако они по прежнему доступны, если в ссылке на картинку postimg . org заменить на postimg.cc

Написал для себя скрипт, который делает такую замену в базе сообщений, может, кому пригодится. Работает крайне медленно, жрёт ресурсы системы, может сделать форум неработоспособным на несколько часов, поэтому добавил программную задержку. А ещё прогресс почему-то не всегда отображается в реальном времени.

Код
<?php
require_once("----ваш путь до ssi.php----/SSI.php");
if (!defined('SMF'))
 die('Hacking attempt...');

header("Content-type: text/html; charset=utf-8");

global $smcFunc;
 
 $request = $smcFunc['db_query']('', '
 SELECT COUNT(id_msg)
 FROM {db_prefix}messages
 WHERE body LIKE "%postimg.cc%"',
 array()
 );
 
 $row = $smcFunc['db_fetch_assoc']($request);

 $count = $row['COUNT(id_msg)'] or die('Сообщений не найдено.');
 
 echo 'Всего сообщений: ',$count, '<br>';
 echo 'Осталось сообщений: <span id="step"></span>';

 while ($row && $count>=0){
 usleep(1000);
 $request = $smcFunc['db_query']('', '
 SELECT id_msg, body
 FROM {db_prefix}messages
 WHERE body LIKE "%postimg.cc%"
 LIMIT 1
 ');
 
 $row = $smcFunc['db_fetch_assoc']($request);
 
 if ($row){
 $new_body = str_replace('postimg.cc', 'postimg.cc', $row['body']);
 $smcFunc['db_query']('', '
 UPDATE {db_prefix}messages
 SET body = {string:body}
 WHERE id_msg={int:id_msg}',
 array(
 'id_msg' => $row['id_msg'],
 'body' => $new_body,
 )
 );
 }
 
 echo '<script>document.getElementById("step").innerHTML = '.$count.'</script>';
 $count--;
 }
?>

UPD: На этом форуме такая замена происходит автоматически? В строках 13, 30 и в строке $new_body = str_replace('postimg.cc', 'postimg.cc', $row['body']);первая "postimg.cc" это "postimg . org" без пробелов.

S.T.A.L.K.E.R.

В админке в через цензуру ставите автозамену одного домена на другой. Профит :D
Скачиваете дамп базы,открываете его нотпад++ и поиском с заменой правите все домены на нужный,сохраняете и заливаете базу обратно. Быстро,ничего не перегружено и так же профит.
Предпочтительный способ выберете сами.

Kira

Цитата: S.T.A.L.K.E.R. от 05 мая 2018, 11:52:07Скачиваете дамп базы,открываете его нотпад++ и поиском с заменой правите все домены на нужный,сохраняете и заливаете базу обратно. Быстро,ничего не перегружено и так же профит.
Чёто мне показалось, что открывать нотпадом файл размером 700мб не очень хорошая идея..

Согласен, есть способы и попроще :)

S.T.A.L.K.E.R.

Цитата: Kira от 05 мая 2018, 14:17:10Чёто мне показалось, что открывать нотпадом файл размером 700мб не очень хорошая идея..

Согласен, есть способы и попроще :)

А зачем всю БД открывать?Достаточно открыть таблицу с сообщениями. ;)

Kira

Это само собой. И да, она сильно меньше всей базы :D
Наверно можно так поступить с результатами выборки, но, например, в моём случае это около 7000 сообщений, тоже приличный объём. А так скриптик за ночь справился.


S.T.A.L.K.E.R.

Цитата: Kira от 05 мая 2018, 21:52:27Наверно можно так поступить с результатами выборки, но, например, в моём случае это около 7000 сообщений, тоже приличный объём.
Я 45 тысяч замен делал примерно за 5 минут.Это на всё.В БД было около 300.000 сообщений.
ВВ-коды переписывали.

Kira


S.T.A.L.K.E.R.


digger®

08 мая 2018, 11:58:09 #8 Последнее редактирование: 08 мая 2018, 12:30:54 от digger®
Цитата: Kira от 05 мая 2018, 14:17:10Согласен, есть способы и попроще :)

Например, так

Код: (mysql)
update smf_messages set body = replace(body, 'postimg._org', 'postimg.cc') where body like '%postimg._org%';

S.T.A.L.K.E.R.

О...
Подсказали ещё проще.Я в мускуле плаваю ещё до сих пор. :-\