Важная деталь для изготовления Блогоскопища (с) (tm) 2008 F17 :) - клонатор баз данных блогов.
Клонировать заготовку блога на движке вордпресс можно с минимальными телодвижениями, если взять дамп блога-заготовки, например, с помощью PHPmyAdmin, и заменить в нем необходимые элементы: домен/субдомен, тайтл, деск, киворды, мыло админа, хэш пароля и т.п. А затем залить этот дамп тем же PHPmyAdmin в качестве нового. Не нужно ничего админить - можно сразу срать нет генерировать нет спамить нет сплогить, а-а-а вот: постить в блог :)
Так я и делал, при этом не придал особого значения, что сбиваются некоторые настройки некоторых плагинов. Подумал, ничего страшного, поправил вручную и нормально.
Но сегодня меня это достало и я решил разобраться, что там ломается.
Всё оказалось печально.
Если заменямая строка является элементом массива и изменяется её длина, то необходимо скорректировать число, указывающее сериализатору ПХП длину строки в массиве.
Было так (фрагмент):
;s:31:"http://feeds.feedburner.com/aaa";
Так неверно:
;s:31:"http://feeds.feedburner.com/bbbbbb";
Правильно так:
;s:34:"http://feeds.feedburner.com/bbbbbb";
Вот регулярка для выделения таких элементов
if(!preg_match_all("|;s:[0-9]+:\"[^\"]*".$sample_for_search."[^\"]*\";|uUi", $dump, $matches)){
return false;
if(!isset($matches[0][0])){ // не сработало
return false;
}
}
Теперь в массиве $matches[0] находятся строки в которых есть $sample_for_search и, при этом, являются элементами массива. Теперь всё просто - выделить строку в кавычках
if(preg_match("|\"(.*)\"|uUi", $match, $matches2)){ // $matches2[1] - содержимое кавычек
Заменить в ней то, что нужно, и собрать элемент массива с новой длиной строки
PS
Уже неделю читаю ридер пять минут в день, так что удалять-добавлять никого не придется - просто некогда.
9 июл. 2008 г.
Организация "блогоскопища" (с) (tm) 2008 F17 :) Деталь четыре.
Ярлыки:
блогоскопище,
вордпресс,
дамп,
mysql
Подписаться на:
Комментарии к сообщению (Atom)
2 комментария:
а лучше сделать: unserialize -> str_replace -> serialize
к тому же данные серелизованные на одной плащадке могут вполне не открыться на другой
Спасибо, полезно и правильно, приму на вооружение.
Но всё равно нужно сначала из дампа добыть строки с сериализованными массивами другой регуляркой. Потому что эта регулярка достает самый внутренний вложенный элемент, а нужно добывать весь массив целиком.
К тому же некоторые заменяемые строки лежат не в массивах, а просто в записях базы данных.
В следующей версии клонатора блогоскопища попробую.
PS
Блог про Новую Зеландию впечатлил.
Отправить комментарий