Skip to content

Latest commit

 

History

History
106 lines (90 loc) · 8.55 KB

README.md

File metadata and controls

106 lines (90 loc) · 8.55 KB

ii-php

IDEC (ii-like Text Exchange Convention) - это технология (преемник протокола ii) построения фидообразных сетей для обмена сообщениями, подробно узнать о ней вы можете здесь. В этом репозитории находится php-реализация "серверной" части IDEC и ii. Имеется поддержка как своего собственного формата базы данных, так и БД mysql (через mysqli), см. config.php. Поддерживаются расширения /x/c/, /x/file, /list.txt, /blacklist.txt, расширенный /u/e (на отдачу), /u/push.

Конфигурация

По-умолчанию хранится в файле config.default.php, который при первом запуске любого скрипта, использующего API данной станции, копируется в config.php. В дальнейшем для работы используется последний.

Рекомендуется назначить в php.ini или ещё где-нибудь путь для сохранения сессий, отличный от /tmp, для нормальной работы веб-интерфейса.

Минимальная установка

Поместить в одну директорию файлы ii-point.php, ii-functions.php, filter.php, transports.php, config.default.php (или config.php). Также надо будет прописать поинтов (пользователей) в конфиг. При такой установке можно отправлять и получать сообщения с помощью клиента. Для синхронизации нужен будет либо push-скрипт, либо отдельный фетчер.

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

Отправка сообщений с сайта

require("ii-functions.php");
msg_to_ii($echoarea, $message, $usersent, "myforum, 1", time(), $userget, $subject, $repto);
// $usersent - отправитель; $userget - получатель (или All); $repto - id сообщения, на которое отвечаем (можно передавать пустую строку)

Синхронизация

Данная php нода поддерживает push-синхронизацию (когда другой узел закачивает сообщения на данный), а также fetch-синхронизацию (когда данный узел скачивает сообщения у другого) через webfetch.php, для использования которого надо создать рядом php скрипт примерно такого содержания

<?php
require("webfetch.php");
$fetchconfig=[
	"http://your-station.ru/ii-point.php?q=/",
	"echoarea1.10",
	"echoarea2.14",
	"myecho.2015"
];
fetch_messages($fetchconfig);
/* дополнительные параметры:
	$one_request_limit=20 - количество сообщений в одном скачиваемом бандле
	$fetch_limit=false - максимум сообщений в индексе (расширенный /u/e)
		(подробности на странице Расширения в документации)
*/
?>

и настроить его запуск в cron.

RSS

Также здесь есть скрипт RSS/Atom граббера, который может импортировать ленты в эхоконференцию. Для его использования достаточно создать рядом php скрипт, написать туда

<?php
require("ii-rss.php");

ii_rss("feedname", "http://your-feed/adress", "echoname.2014");
/* дополнительно:
	$include_link=true - оставлять ссылку на оригинальную новость
	$post_old_feeds=true - при первом запуске запостить все старые новости в ленте
	$point="sexyrobot" - от имени кого отправляем сообщение
*/

?>

и поместить его вызов в cron. Для хранения данных rss ленты требуется создать рядом каталог feeds.

Также есть скрипт ii2rss.php, который проделывает обратную работу - отдаёт rss-ленту эхоконференции. Принимает GET-параметр echo с названием нужной эхи.

Чёрный список

Есть возможность игнорировать неправильные или плохие сообщения при синхронизации с другими станциями или с клиентами. Для этого есть файл blacklist.txt, в который можно записывать msgid таких сообщений. Записывать в формате по хэшу на строку. Название файла меняется через конфиг.

Список эхоконференций

Он задаётся в конфиге config.php, вместе с описаниями. Служит для автоматического доступа клиента к ресурсам сети. Также используется веб-интерфейсом. Образец списка:

$echolist=[
	["pipe.2032", "Наша болталка"],
	["ii.14", "Обсуждение сети"],
];

Миграция на mysql

В случае большого количества сообщений стоит мигрировать на mysql. Алгоритм таков:

  • Убедитесь в наличии расширения php mysqli, так как всё работает через него.
  • Посмотрите, нет ли в каталоге echo/ посторонних файлов (например, index.html или что-то ещё). Если есть, временно уберите.
  • В конфиге в $mysqldata по образцу записываются нужные данные (база данных, логин, пароль, название таблицы).
  • Запускаете скрипт mysql-migrate.php, который создаст таблицу и начнёт сбрасывать по порядку содержимое каждой эхи. Если он прервался на полпути, запускаете снова (продолжит с того же места).
  • Прописываете mysql-транспорт в config.php (образец в комментариях).
  • Попробуйте переименовать каталоги msg/ и echo/, и смотрите, всё ли работает. В случае чего можно вернуться к использованию обычной базы через конфиг.

Миграция со старой mysql-базы на новую

Эти шаги требуются для тех, кто пользовался mysql на версии ноды до 28.02.2016 и обновляется на актуальную версию. Новый mysql-транспорт отличается от старого тем, что не требует файлового индекса для эх.

  • Убрать временно все скрипты синхронизации и фетчеры (возможно, остановить cron)
  • Поменять название текущей таблицы в конфиге в $mysqldata на другое
  • В скрипте mysql-migrate.php раскомментировать строки с 5 по 15 и убрать строку 4
  • В $oldmysqldata (файл mysql-migrate.php) выставить параметры для предыдущей таблицы
  • Запустить mysql-migrate.php и ждать, пока не наполнится новая таблица
  • Удалить файл old-mysql-transport.php: он нам больше не понадобится.
  • Остальное аналогично предыдущему варианту миграции
  • После проверки работы вернуть cron и гейтскрипты обратно