dil: (Default)
Thursday, September 28th, 2017 03:22 pm

Предыдущая пара постов в DW и ЖЖ не имеет ссылок на мой собственный блог, потому что он не смог кросспостить их в DW, и пришлось скопировать руками.

В вордпрессе стала вылезать идиотская ошибка: Something went wrong - -32300 : transport error - HTTP status code was not 200
Видать, что-то поменялось в DW’шном API, но, блин, хотя бы полученный по HTTP код ответа можно было показать, а не просто рассказывать, что он не 200 :(

Похоже, пора переходить на свой блоговый движок. Хотя я его ещё не полностью дописал, но кросспостинг там уже вполне работает, и ошибку там удалось увидеть гораздо яснее: код 307 – пересылка с http://www.dreamwidth.org/interface/xmlrpc на https: . Поменял в настройках DW’шного урла http на https, всё заработало.

dmarck, похоже, ты прав, нынче все переезжают с http на https. Но в том же ЖЖ это только на веб-сайтах приделали, а API там продолжает работать по http.

Попробовал в вордпрессовском плагине livejournal-crossposter-remake так же поменять урл, но нифига не помогло: Something went wrong - -32300 : transport error: http_request_failed Couldn't resolve host 'https'
Пришлось копаться в коде, оказалось, что там используется IXR_Client из этого самого вордпресса, который https не умеет в принципе. Вот щас поменял IXR_Client на WP_HTTP_IXR_CLIENT, посмотрю, поможет ли.

Но нафиг нужен такой похапешный софт, который не понимает явно указанный в урле протокол.. Выходит, это тот самый случай, когда проще самому написать, чем копаться в чужом коде. Только там ещё некоторые другие вещи дописать надо.

А в этом livejournal-crossposter-remake ещё и коты нашлись..

Read the rest of this entry » )

Оригинал этой записи в личном блоге.

dil: (Default)
Saturday, August 23rd, 2014 12:51 pm

а студент-двоечник.

Категории и тэги лежат в одной таблице. Зачем — непонятно, но это ещё фигня. Таблица выглядит так:

CREATE TABLE `wp_terms` (
  `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL DEFAULT '',
  `slug` varchar(200) NOT NULL DEFAULT '',
  `term_group` bigint(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`term_id`),
  UNIQUE KEY `slug` (`slug`),
  KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Что такое term_group — загадка природы, там у всех записей 0.
slug — это URL-encoded name. Им лень было при обработке запросов в /tag/ и /category/ сделать url-decode и поискать по имени, лучше сделать лишнее поле. Причём поле это такой же длины, как и name, а один неанглоязычный символ из name в url-encoded виде занимает 6 байт, например буква “л” выглядит в slug как %d0%bb . А вот почему slug сделан уникальным ключом, а name неуникальным — загадка природы.

А тип записей в wp_terms вообще отсутствует. Он ВНЕЗАПНО лежит в другой таблице:

CREATE TABLE `wp_term_taxonomy` (
  `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `term_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `taxonomy` varchar(32) NOT NULL DEFAULT '',
  `description` longtext NOT NULL,
  `parent` bigint(20) unsigned NOT NULL DEFAULT '0',
  `count` bigint(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`term_taxonomy_id`),
  UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`),
  KEY `taxonomy` (`taxonomy`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Вот в ней в поле taxonomy хранит тип записи. В текстовом виде: “category”, “post_tag” или “link_category”. И в сочетании с term_id оно составляет уникальный ключ. То есть, если попытаться создать и категорию, и тэг с одинаковым именем, то в wp_terms будет только одна запись, а в wp_term_taxonomy – две, с одинаковым term_id. Но это такая редкость, что экономить единичные записи в таблице, существенно усложняя при этом поиск по имени (join двух таблиц вместо простого поиска в одной) — это идиотизм.

Что есть parent — я вообще не понял, там всегда 0. А count (руки оторвать за использование названий стандартных функций в качестве имён полей) по идее должен хранить количество постов, привязанных к данной категории или тэгу. И для большинства записей это действительно так. Но иногда..

mysql> select term_taxonomy_id, count from wp_term_taxonomy where term_taxonomy_id = 1;
+------------------+-------+
| term_taxonomy_id | count |
+------------------+-------+
|                1 |  1933 |
+------------------+-------+

mysql> select count(*) from wp_term_relationships where term_taxonomy_id = 1;
+----------+
| count(*) |
+----------+
|     3708 |
+----------+

Ничего общего.. И даже если посчитать только опубликованные посты (исключить черновики и старые версии), всё равно не совпадает:

mysql> select count(*) from wp_term_relationships r join wp_posts p on r.object_id=p.ID where r.term_taxonomy_id = 1 and p.post_status='publish';
+----------+
| count(*) |
+----------+
|     1936 |
+----------+

Оригинал этой записи в личном блоге.

dil: (Default)
Wednesday, August 20th, 2014 09:01 pm

и убеждаться, что похапе серьёзно разрушает моск.

mysql> desc wp_options;
+--------------+---------------------+------+-----+---------+----------------+
| Field        | Type                | Null | Key | Default | Extra          |
+--------------+---------------------+------+-----+---------+----------------+
| option_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| blog_id      | int(11)             | NO   |     | 0       |                |
| option_name  | varchar(64)         | NO   | UNI |         |                |
| option_value | longtext            | NO   |     | NULL    |                |
| autoload     | varchar(20)         | NO   |     | yes     |                |
+--------------+---------------------+------+-----+---------+----------------+

mysql> select autoload,count(*) from wp_options group by autoload;
+----------+----------+
| autoload | count(*) |
+----------+----------+
| no       |       27 |
| yes      |      243 |
+----------+----------+

20 байт для хранения булевской переменной — это что надо курить, чтоб так сделать?!

Оригинал этой записи в личном блоге.

dil: (Default)
Tuesday, August 19th, 2014 08:03 pm

Пытаюсь разобраться в структуре базы wordpress’а… Там есть таблица wp_comments, в ней, очевидно, лежат комментарии. Сотня:

mysql> select count(*) from wp_comments;
+----------+
| count(*) |
+----------+
|      101 |
+----------+

А ещё есть таблица wp_commentmeta, в которой лежит в шесть раз больше не пойми чего..

mysql> select count(*) from wp_commentmeta;
+----------+
| count(*) |
+----------+
|      667 |
+----------+

mysql> desc wp_commentmeta;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| meta_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| comment_id | bigint(20) unsigned | NO   | MUL | 0       |                |
| meta_key   | varchar(255)        | YES  | MUL | NULL    |                |
| meta_value | longtext            | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

meta_key там везде одинаковый:

mysql> select distinct meta_key from wp_commentmeta;
+-----------------------+
| meta_key              |
+-----------------------+
| _wp_trash_meta_status |
+-----------------------+

А значений у него целых два, 0 и 1:

mysql> select distinct meta_value from wp_commentmeta;
+------------+
| meta_value |
+------------+
| 1          |
| 0          |
+------------+

Но при этом имеющиеся там comment_id совершенно не совпадают с теми, что есть в wp_comments:

mysql> select count(*) from wp_commentmeta where comment_id in (select comment_id from wp_comments);
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

Я фигею, дорогая редакция.

Оригинал этой записи в личном блоге.

dil: (Default)
Saturday, May 3rd, 2014 05:29 pm

Попробовал экспортировать блог из вордпресса и импортировать его в другой движок. Фигтам, импорт сломался, ругнувшись на некорректный формат pubDate. Пошёл смотреть, что там в экспортном xml, офигел. Первый год до нашей эры:

$ grep pubDate wordpress.2014-05-02.xml
<pubDate>Wed, 13 May 2009 21:36:54 +0000</pubDate>
<pubDate>Fri, 15 May 2009 11:42:31 +0000</pubDate>
<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
<pubDate>Sun, 17 May 2009 18:48:06 +0000</pubDate>
<pubDate>Mon, 18 May 2009 13:06:05 +0000</pubDate>

“Давайте отрубим крокодилу хвост до самой головы!” Чтоб эти быдлокодеры больше не брались писать программы.

Upd: выскрытие показало, что так выглядит дата публикации черновиков (неопубликованных постов). Причём в базе у них дата вполне себе есть. Нету лишь даты в GMT:

mysql> select ID, post_date, post_date_gmt, post_status, post_modified, post_modified_gmt from wp_posts where post_date_gmt=0;
+------+---------------------+---------------------+-------------+---------------------+---------------------+
| ID   | post_date           | post_date_gmt       | post_status | post_modified       | post_modified_gmt   |
+------+---------------------+---------------------+-------------+---------------------+---------------------+
| 3955 | 2012-03-26 06:38:53 | 0000-00-00 00:00:00 | draft       | 2012-03-26 06:38:53 | 2012-03-26 06:38:53 |
| 5347 | 2013-05-07 09:51:35 | 0000-00-00 00:00:00 | draft       | 2013-05-07 09:51:35 | 2013-05-07 09:51:35 |
+------+---------------------+---------------------+-------------+---------------------+---------------------

Оригинал этой записи в личном блоге.
Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме.

dil: (Default)
Saturday, February 19th, 2011 10:26 pm

После апгрейда дебиановского пакета с вордпрессом блог (который standalone) сломался нафиг. Причём сломался очень противно: по HTTP тупо выдавал 500 ошибку, а в логи при этом не писал ровным счетом ничего. Даже при включенном дебаге. Возможно, надо было что-то проапгрейдить в базе для нового релиза, но узнать об этом не представлялось возможным, потому что страница для апгрейда выдавала редирект на страницу с логином, а там меня ждала та же 500 ошибка. Поставленная вручную версия с сайта производителя работала ровно до тех пор, пока я не вписал в конфиг параметры доступа к базе и прочие ключи. После этого она стала выдавать пустые страницы, только с кодом 200. Оказалось, ей не хватало темы от старой инсталляции, но сказать об этом хотя бы в error.log эта поделка не удосужилась, это я определил опытным путём.


В общем, гадость этот ваш wordpress, как и все остальные поделки, написанные на php. Надо таки освоить питон и переползти на byteflow.


Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

dil: (Default)
Tuesday, October 5th, 2010 10:34 am

http://www.microsoft.com/web/wordpress/

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

dil: (Default)
Sunday, March 28th, 2010 01:49 pm

Fatal error: Out of memory (allocated 19922944) (tried to allocate 55 bytes) in /var/www/blog.ufm.su/www/wp-includes/pomo/mo.php on line 204

Феда, ну ты понял,  да? Мои комментарии в твоём блоге почему-то не показываются, а в жж ты их отключил..
P.S. да, я знаю, что у меня на том же WP. Вот как руки дойдут,  переползу на byteflow. А это ещё один повод.

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Tags:
dil: (Default)
Monday, April 27th, 2009 03:57 pm

Каждая кухарка не должна уметь управлять государством. Это не её собачье дело.

Равно как не должна она мнить себя крутым программистом, прочитав книжку “php за 5 минут”. Ладно бы она для себя лично писала, так нет, блядь, выкладывает на всеобщее обозрение. Я ж не эгоистка какая, вот написала полезную штуку, нате, пользуйтесь..

А обнаруживается это только после того, как промучившись пару часов с настройкой, решаешь заглянуть в код. А там такое дерьмище..

P.S. Пост написан после просмотра пары плагинов для WordPress. Сам по себе-то он вполне даже ничего, но то, что написали к нему кухарки обоего пола своими кривейшими руками..

P.P.S. Почему-то на PHP такое встречается горазо чаще, чем на других языках. Наверное, язык располагает..

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

dil: (Default)
Sunday, April 26th, 2009 10:14 pm

типа, вот

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Tags: