[Закрыть]
 
popoff.donetsk.ua
Человек, который сознает происходящее, знает, что он чувствует, где находится и который сейчас час. Он знает, что после его смерти деревья будут расти, как и прежде, но он их уже не увидит; поэтому он хочет видеть их сейчас со всей остротой, на которую способен. /Эрик Берн/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Статьи - Программирование - Движок для портала
Я это делаю
Персональное меню
Голосование
Деньги, либо любимое занятие? Постоянный адрес этого вопроса
Деньги, но неинтересная работа и невозможность уделить время семье
Интересная работа, возможность саморазвиваться, но нищенский заработок
Ваш возраст (не обязательно)
Почему? (не обязательно)

Голосование закрыто.

Поиск по сайту
Реклама
Гинеколог, стоматолог, психотерапевт в Донецке
Статистика

Движок для портала

Постоянный адрес статьи

Содержание

Введение

popoff.donetsk.ua/light - это движок на php + mysql с открытыми исходными кодами, который может быть использован для создания интернет-портала и который распространяется на условиях GPL v.2.

Начиная с версии 20070208 в комплект поставки системы включены такие модули, как форум и служба управления статьями. Эти два модуля в сочетании с службой новостей и подсистемой управления аккаунтами пользователей позволяют создать на основе движка popoff.donetsk.ua/light динамический сайт с регистрацией пользователей, рассылкой новостей, публикацией статей и обсужденями в форуме.

Особенности устройства службы управления статьями позволяют использовать её для организации систем совместного владения статьями (так называемые wiki). В службе ведётся журнал всех изменений, есть возможность подписки на рассылку уведомлений об изменениях. Дополнительно, использованный в системе модуль морфологического анализа слов позволяет подсвечивать ошибки в размещаемых на сайте статьях.

Тем не менее, в этой системе нет модулей, которые могут потребоваться на полноценном сайте. Например, в этой системе отсутствует служба поиска, словарь терминов, служба управления файлами, ротаторы, служба обмена приватными сообщениями, служба голосований и опросов, а также многие другие. В общем случае, в системе popoff.donetsk.ua/light есть только те модули, которые описаны на этой странице. Все остальные модули пока что распространяются только на платной основе.

Хотя эта система и может использоваться для создания самостоятельных сайтов, установка и сопровождение этой системы требует определённых програмистских навыков. У этой системы отсутствует удобный инсталлятор и служба автоматической настройки. Чтобы запустить систему, Вам придётся разобраться в её настройках. Я, как разработчик этой системы могу помочь Вам лишь ответами на Ваши вопросы, который всегда с радостью принимаются в форуме.

Поэтому, в первую очередь эта система рекомендуется как движок для разработки собственных модулей. Использование этой системы позволяет сократить время разработки таких модулей за счёт довольно широкого набора готовых функций и подсистем, основные возможности которых перечислены ниже.

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

Основные возможности

  • Подсистема управления аккаунтами пользователей

    Основные возможности:

    • Каждый пользователь идентифицируется по логину и паролю.
    • Логин хранится в двух видах: упрощённый и основной. Основной - это та строка, которую ввел пользователь. Упрощённый - для запрета регистрации пользователей с похожими логинами. Похожесть может быть не только по регистру символов, но и по межкодировочной внешней похожести. Например, логин popoff - это то же самое, что и ророff, хотя во втором варианте первые четыре буквы - русские.
    • Логин пользователя считается зарегистрированным с момента, когда пользователь подтвердил свою регистрацию. Это позволяет избежать появления логинов, которые заняты, но не используются. Кроме того, пользователь мог ввести в качестве своего контактного e-mail какой-нибудь неправильный e-mail, который был проверен системой и идентифицирован как существующий e-mail. В таком случае пользователь может повторить процесс регистрации с начала и ввести правильный e-mail, при этом не потеряв возможность зарегистрироваться с тем логином, с которым он пытался зарегистрироваться изначально.
    • Регистрация новых пользователей: добавлена двухуровневая защита от автоматических регистраций. Первый уровень - пользователь должен ввести число, изображенное на рисунке. Второй уровень - количество регистраций с одного ip-адреса ограничено во времени.
    • Пароль в базе данных не хранится (хранится md5 хеш). Если пользователь забыл пароль, он может воспользоваться функцией автоматического изменения пароля. Для изменения пароля пользователю высылается запрос на его контактный e-mail.
    • Для аутентификации используется алгоритм, аналогичный http-digest. Этот алгоритм позволяет не передавать пароль по сети в открытом виде.
    • Число неудачных попыток ввода пароля ограничено. В случае превышения лимита логин блокируется. Разблокировка происходит автоматически через некоторое время после прекращения попыток входа под этим логином либо если пользователь воспользовался функцией немедленной разблокировки логина (высылается запрос на e-mail пользователя).
    • Можно задать список ограниченных ip-адресов, с которых будет невозможен вход и регистрация в системе. Допускаются временные или постоянные ограничения. Постоянное ограничение может быть снято только вручную. Временные ограничения снимаются автоматически по прошествии некоторого, выбранного администратором, который устанавливает ограничение, времени.
    • Каждый пользователь может указать о себе расширенную информацию: фамилию, имя, отчество, адрес, день рожденья, телефон и т.п. Напротив каждого поля администратор может проставить галочку, что это поле было им проверено. Это полезная функция для создания сайтов, на которых одни пользователи должны быть уверены в том, что другие пользователи - это именно те пользователи, за которых они себя выдают.
    • Подсистема управления аккаунтами пользователей включает в себя подсистему управления привилегиями администраторов. Подсистема управления привилегиями администраторов позволяет иерархически организовывать привилегии (привилегии часто соответствуют некоторым объектам, к которым следует ограничить доступ); иерархически организовывать администраторов - для указания кто кем может управлять; объединять привилегии в роли; множественно наследовать как роли, так и привилегии. Записи в списках привилегий администраторов ограничиваются по списку подсетей, с которых администратор может обращаться к системе.
    • Реализована заготовка для редактирования настроек аккаунта пользователем (например, формат отсылаемых на e-mail сообщений и диапазон допустимости изменения ip-адреса).
    • Есть возможность банить (ограничивать) ip-адреса. При обращении с ограниченного ip-адреса на сайте нельзя зарегистрироваться, оставить сообщение в форуме, или выполнить какие-либо другие действия, приводящие к изменению содержимого страниц сайта.
    • Включена одна из степеней защиты от DoS атаки, состоящая в ограничении количества запросов с одного ip-адреса во времени.
    • Администраторы могут блокировать аккаунты пользоавтелей.
    • Есть возможность блокировать почтовые аккаунты (адреса электронной почты). Система не производит никаких рассылок на заблокированные адреса.
    Поддержка многоязычности и кеширование контента.

    Основные возможности:

    • Перечень, названия языков и кодировка (charset) для каждого языка настраивается администраторами сайта без вмешательства программиста.
    • Во всех службах сайта можно создавать многоязычные таблицы. Например, новости (тело текста новости и заголовок) хранятся в отдельной таблице. В таком случае система позволяет создать администраторов, каждый из которых будет иметь доступ к редактированию новостей только в доступном этому администратору языке.
    • Система следит за пользователями. Все письма, отправляемые пользователям, отправляются в том языке и с использованием того набора шаблонов («скина»), которые выбрал для себя пользователь, не зависимо от того, в каком языке просматривает сайт текущий пользователь.
    • Встроена подсистема форматирования дат, которая форматирует даты в зависимости от выбранного языка. На русском языке, например, можно получить даты типа «29 октября 2004 года» (месяц в родительном падеже).
    • Исходные сообщения и их переводы на все языки хранятся в базе данных MySQL. Перевод сообщений производится вызовом функции m(«Текст сообщения на понятном языке|с комментариями к сообщению, которые необходимы для перевода, но не показываются, если в базе данных нет ни одного перевода»);
    • Если нет перевода на нужный язык, то подбирается перевод на наиболее похожий язык. Если перевода нет вообще, то сообщение отображается в исходном варианте. При работе с многоязычными таблицами считается, что если запись существует, то для нее есть перевод хотя бы на один язык. Степень похожести языков задаётся администраторами.
    • Имя языка, кроме языка по умолчанию, показывается на всех страницах в адресной строке браузера. Это позволяет нормально индексировать сайт в поисковых системах.
    • Для перевода сайта все сообщения можно закачать в виде одного текстового файла специального формата, отредактировать этот файл и закачать его обратно.
    • Модуль кеширования генерируемого контента может использоваться для кеширования как выводимого в браузер контента так и для кеширования результатов вычислений.
    • Использованная подсистема предварительной подгрузки переводимых сообщений позволяет значительно сократить нагрузку на сервер баз данных. Подсистема не требует никакой настройки. Эта подсистема сама определяет, какие сообщения могут потребоваться текущему скрипту и загружает все сообщения одним SQL-запросом.
    • Эта служба позволяют дизайнеру изменять дизайн сайта при помощи веб-интерфейса.
    Подсистема отладки сайта

    Основные возможности:

    • Сайт может работать в двух режимах: в режиме отладки и в рабочем режиме.
    • В режиме отладки на страницах сайта дополнительно показывается отладочная информация. Информацию можно динамически показывать/прятать при помощи функции на JavaScript, поэтому страницы в режиме отладки не сильно отличаются от соответствующих страниц в рабочем режиме.
    • В отладочную информацию могут быть включены сообщения об ошибках, сообщения, генерируемые Вашими скриптами, дампы переменных результаты выполнения функции explain для выбранных Вами sql-запросов, временные отметки. Временные отметки позволят Вам легко определить, сколько времени потратилось на выполнение какой части скрипта. Для управления сайтом есть специальные страницы программиста. На них программист может выполнить любые SQL-запросы, загрузить и выполнить SQL-скрипт, выполнить небольшой скрипт на php, восстановить все таблицы (выполнить repair table для всех таблиц), назначить «всемогущего» администратора, произвести экспорт/импорт всей базы данных, создать базу данных, запустить юнит-тесты (при наличии).
    • Если режим отладки включен, то он ограничен одним ip-адресом, с которого он был включен. Для остальных ip-адресов сайт всегда работает только в рабочем режиме.
    • Включить режим отладки можно только со страниц программиста. Выключить режим отладки может кто угодно.
    • Режим отладки может быть запрещён вообще специальными настройками сайта.
    • Доступ к страницам программиста ограничен по паролю и ip-адресам. Эта информация задаётся в скриптах.
    • Вам не требуется следить за тем, записаны ли какие-нибудь ошибки в журнале ошибок. Подсистема отладки сайта сама отправит на Ваш e-mail сообщение в случае возникновения каких-либо ошибок.
    Подсистема поддержки unit-тестов

    Основные возможности:

    • все юнит-тесты хранятся в отдельной папке и могут быть легко исключены из комплекта поставки
    • имя файла юнит-теста совпадает с именем тестируемого файла. Это позволяет легко сортировать и искать юнит-тесты.
    • юнит тесты могут быть построены к html-страницам, к обычным функциям, а так же к шаблонам.
    • для тестирования html-страниц в систему включены функции выполнения http-запросов (get, post) и функции анализа возвращенного результата. Кроме того, все страницы сайта возвращают в специальном заголовке код выхода, который может быть использован для анализа состояния скрипта.
    • для тестирования html-страниц в систему включены функции проверки валидности всех ссылок, появившихся на сгенерированной странице.
    • во всех тестах происходит анализ журнала ошибок. Если во время выполнения теста в него была произведена запись, то считается, что тест не пройден.
    • Шаблоны - это те же программы, но только на упрощённом языке. К шаблонам тоже можно написать юнит-тест. В таком случае будут проверены шаблоны из всех наборов шаблонов, включённых в систему.
    • Для проверки функций отправки почты в подсистеме тестирования есть функция проверки электронного почтового ящика. Все генерируемые в системе письма содержат в себе специальный заголовок, по которому можно определить, из какой части системы это письмо было отправлено. Функция проверки почты проверит Ваш почтовый ящик и вернёт массив с телами тех писем, которые содержат в себе ожидаемый заголовок. Вы можете сказать, что тест пройден либо по факту того, что письмо было доставлено, либо после дополнительного анализа тела письма.
    • для тестирования систем, требующих наличия аккаунта пользователя, в системе есть два специальных пользователя с логинами, начинающимися на test. Эти пользователи автоматически регистрируются в системе при выполнении юнит-тестов.
    • функция проверки валидности логина пользователя устроена таким образом, что логины, начинающиеся на test считаются правильными только, если обращение происходит с определённого ip-адреса. Это означает, что с неправильного ip-адреса с таким логином нельзя ни зарегистрироваться, ни войти, ни выполнить какое-либо другое обращение к этому аккаунту.
    • при выполнении http-запросов система сама произведёт вход для этих пользователей, Вам только нужно будет указать, под каким пользователем следует выполнять этот http-запрос.
    • в тестах можно легко назначить любые привилегии для этих пользователей.
    Подсчёт статистики

    Основные возможности:

    • собирается следующая статистическая информация: кто (логин, при наличии), когда (с точностью до часов), откуда (ip-адрес), сколько раз, с каким агентом, к каким страницам сайта обратился, с какой страницы зашёл на сайт.
    • эту информацию можно фильтровать, группировать и сортировать любым удобным для Вас способом.
    • система может отслеживать, по каким словам находится сайт в поисковых системах. Поддерживается относительно большой список основных поисковых систем.
    • Встроена функция автоматического распознавания кодировки текста. Функция основана на анализе двух- и трёхбуквенных последовательностей. Поддерживаемые кодировки: Windows-1251, KOI-8r, Unicode, Unicode от JavaScript. Поддерживаемые языки: русский.
    • Администраторами могут настраиваться списки роботов . Роботы определяются по IP-адресам и по User-Agent. Если к системе обращается робот, то в некоторых случаях система ведёт себя не так, как при обращении к системе обычных пользователей: для роботов запрещены все ротаторы, запрещена авторизация, запрещено использование сессий, в форуме и в службе статей можно настроить запрет на доступ (т.е. запрет на индексирование поисковиками) к темам и статьям.
    • Система ведёт учёт посещаемости сайта поисковыми роботами. Есть возможность посмотреть, как часто какие роботы посещают сайт.
    Библиотека для фильтрации XML-документов

    Название, думаю, говорит само за себя. Подробно описана в разделе xmlfilter. Реализовано множество полезных для любого веб-приложения функций

    Основные возможности:

    • двухуровневая проверка валидности введённого e-mail: через регулярное выражение и через запрос к серверу.
    • анализ html-страниц: выбор значений всех полей формы с указанным именем, выбор всех ссылок из html-страницы
    • загрузка данных из формы в массив. позволяет создавать массивы, в которых присутствуют все ожидаемые и только ожидаемые поля. поля, переданные из формы, но не ожидаемые, будут проигнорированы на этапе загрузки данных. поля, ожидаемые, но не переданные из формы, будут инициализированы указанными Вами значениями. Позволяет так же идентифицировать формы, из которых производится загрузка - это может быть полезно, если один скрипт обрабатывает данные, поступающие из нескольких форм.
    • Библиотека аутентификации пользователей по алгоритму, аналогичному http-digest. Это позволяет исключить возможность перехвата или подмены пароля пользователя во время аутентификации.
    • Функция для простого редиректа на другую страницу. В режиме отладки редирект происходит не сразу, а через некоторое время. Это время необходимо для того, чтобы проанализировать отладочную информацию.
    • Функция http_check_ip_subnet позволяет проверить принадлежность некоторого ip-адреса одной из подсетей из списка подсетей.
    • a.calc - модуль для вычисления формул. Формулы пока что допускаются только самые простые: сложение, вычитание, умножение и деление. Вычисления производятся с учётом приоритетов и скобок. Модуль позволяет использовать переменные.
    • a.compare - модуль, который может сравнивать строки, слова, абзацы и даже просто массивы. При сравнении статей этот модуль автоматически выберет и подсветит все различия. Сравнение основано на вычислении расстояния Левенштейна1.
    • Библиотека a.range для работы с интервалами позволяет представлять интервалы, вычислять объединение интервалов, проверять принадлежность интервалу. Интервал - это диапазоны чисел, например {1..5,7-8,21..50}.
    • Добавлена библиотека a.zip.create для создания zip-архивов. Для сжатия используются функции библиотеки Zlib3.
    Библиотека управления загрузкой изображений

    Основные возможности:

    • Для того чтобы показать пользователю форму загрузки изображений, достаточно включить в шаблон основной формы команду загрузки формы управления изображениями. Для сохранения изображения (включая все проверки на валидность), достаточно в функцию сохранения основной формы добавить вызов одной функции.
    • Изображения могут загружаться в одном из двух форматов (jpg, gif). Вам не нужно ничего делать в основных скриптах для правильного составления URL этого изображения: все делается автоматически.
    • Для каждого языка сайта можно загрузить своё изображение. В случае, если изображение для текущего языка не загружено, будет показано изображение для наиболее похожего языка. Эта функция может быть полезна, например, в службе новостей, если в изображениях появляются надписи, которые хорошо бы тоже перевести.
    • К каждому изображению прикрепляется комментарий (естественно, зависящий от языка).
    • Библиотека позволяет автоматически создавать и управлять изображениями в нескольких вариантах. Например, обычное (как было загружено пользователем) и в уменьшенном варианте. Вам не нужно заботиться об удалении вариантов изображений с диска. Эта библиотека сама все удалит, когда это потребуется.
    • Есть возможность сбора всех изображений (файлы на всех языках, все комментарии) в один массив. Эта функция полезна, например, для создания архивной копии некоторых страниц сайта (например, в той же службе новостей - сохранить всю новость в один файл).
    Библиотека работы с электронной почтой

    Основные возможности:

    • Можно настроить систему на использование встроенной функции mail() или на использование SMTP-сервера. При использовании SMTP-сервера поддерживается SMTP-авторизация.
    • Запланированная рассылка электронных сообщений с ограничением нагрузки на smtp-сервер. Отправляемые сообщения в момент генерации записываются в базу данных, а рассылаются блоками не более чем MAIL_SEND_COUNT сообщений в блоке не чаще одного блока в MAIL_SEND_DELAY секунд. Ведётся подробный журнал отправляемых с сервера сообщений.
    • Можно отправлять почту в текстовом или html-формате.
    • Вложения добавляются вызовом одной функции.
    • Можно автоматически проверять почту на Вашем почтовом ящике по протоколу POP3.
    Библиотека работы с базой данных MySQL

    Все sql-запросы в системе передаются на вход специальной функции. Эта функция проверит, выполнился ли Ваш запрос и запишет сообщение об ошибке в журнал (и покажет его в отладочной информации при включённом режиме отладки) в случае, если запрос содержал в себе ошибку.

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

    Библиотеки mysql.xml.export и mysql.xml.unserialize позволяют сохранять и восстанавливать базы данных из архивных копий в формате XML.

    В систему включена библиотека работы с деревьями. Основные возможности:

    • Деревья хранятся способом, описанным Joe Celko4.
    • На таблицу, в которой хранится дерево накладывается строгое ограничение: имена и назначение полей такой таблицы жёстко заданы библиотекой и не могут быть изменены пользователем.
    • Деревья хранятся в таблицах, поддерживающих транзакции. Все операции над деревом выполняются одной транзакцией.
    • Процедура удаления ветки дерева поддерживает каскадное удаление записей из всех связанных таблиц и вызовы callback-функции для удаления информации, которая привязана к вершинам дерева, но не хранится в базе данных. Например, фотографии.
    • Процедура вставки элементов дерева позволяет вставлять элемент ребёнком слева или справа. При вставке учитывается, к какому краю ближе расположен родитель и, соответственно, происходит обновление левой либо правой части дерева.
    • При работе с деревьями чаще всего требуется получить список всех предков заданной вершины и список всех непосредственных потомков этой вершины. Для этого библиотека включает в себя две функции, которые возвращают части SQL-запроса. Вы можете использовать эти части для создания собственных запросов чтения информации из базы данных.
    • В библиотеку включена функция перемещения узла дерева. Эта функция позволяет вставлять перемещаемый узел ребёнком или братом нового узла слева или справа, в зависимости от Вашего выбора. Функция устроена таким образом, что перемещение нескольких узлов выполняется одним sql-запросом. Это значительным образом ускоряет процесс перемещения вершин.
    • Функция mysql_tree_file() позволяет найти путь, заданный именами файлов в древообразном каталоге. В случае отсутствия строгого совпадения эта функция позволяет найти в каталоге путь, наиболее похожий на искомый.
    • Включена функция проверки дерева на целостность.
    • Библиотека поставляется вместе с UNIT-тестами.
    Библиотека функций для управления постраничным выводом информации

    Вы просто говорите, сколько всего записей имеется в базе данных, сколько Вы хотели бы показать на одной странице и какую страницу нужно показать. Система сама проверит правильность всех исходных данных, сгенерирует для Вас LIMIT раздел для SQL-запроса, сгенерирует перечень ссылок для перехода между страницами и даже покажет эти ссылки на Вашей странице. Подробнее Четкое разделение функций.

    Система состоит из библиотек. В каждой библиотеке содержатся модули. Для большинства модулей в системе создаются следующие файлы:

    1. загрузчик (файл *.html). Этот файл доступен из интернета. Содержимое этого файла - минимально для упрощения процедуры обновления.
    2. скрипт управления (файл *.html.php). Анализирует запрос, загружает данные формы, вызывает функции модификации базы данных, вызывает загрузчики шаблонов.
    3. набор функций (файл *.php). Каждое действие, связанное с модификацией базы данных, оформляется в виде отдельной функции. Функции одного модуля описываются в отдельном файле.
    4. загрузчик шаблона (файл *.xml.php) - подготавливает данные, необходимые для загрузки соответствующего шаблона.
    5. собственно шаблон (файл *.xml) - задаёт способ представления данных.

    Этот перечень может быть изменён: можно создать несколько файлов с наборами функций, а можно вообще не создавать такие файлы, если модуль не изменяет содержимое базы данных. Можно при необходимости создать несколько шаблонов и несколько загрузчиков шаблонов. А можно создать просто модуль, в котором будет содержатся только один файл с функциями, например, для использования остальными модулями этой библиотеки.

    Все имена в системе (кроме тех, которые ещё предстоит рефракторить) соответствуют соглашениям об именах. В системе использован собственный шаблонный движок.

    Основные возможности:

    • шаблон компилируется в php-скрипт только один раз при первом обращении к шаблону. При всех остальных обращениях выполняется только этот сгенерированный php-скрипт.
    • в шаблонах поддерживается многоязычность. Для перевода на другой язык шаблоны изменять не требуется.
    • по умолчанию из шаблонов удаляются все повторяющиеся пробелы и концы строк. Это несколько снижает объем генерируемых страниц.
    • интеграция шаблонов с системой в целом. В частности, в шаблонах есть команды загрузки других шаблонов. Это 1) повышает гибкость шаблонов за счёт того, что в шаблонах становится доступно большее количество динамической информации 2) повышает гибкость шаблонов за счёт того, что сам дизайнер может разбивать шаблоны на части и каждую часть записать в отдельный файл 3) повышает быстродействие за счёт того, что будут подготавливаться только реально необходимые данные; если раньше в этом шаблоне предполагалось показывать некоторые данные, а теперь их было решено показывать в другом шаблоне, то просто переносим команду загрузки шаблона в другое место. Загрузчики шаблонов при этом изменять не требуется.
    В системе не используется ООП

    Сложно сказать, хорошо это или плохо. Но это факт и, видимо, в ближайшем будущем он не будет изменён. Примеры реализации модулей в системе

    В комплект поставки системы входят примеры реализации следующих модулей:

    • Служба новостей. Позволяет публиковать и рассылать посетителям сайта новости.
    • Служба управления статьями. Позволяет публиковать на сайте статьи и динамически управлять содержимым сайта.
    • Форум. Позволяет проводить обсуждения.
    • Подсистема морфологического анализа слов. Позволяет проверять орфографию, подбирать варианты замен слова и организовывать поиск с учётом морфологии слов.
    • Служба go. Используется для организации ЧПУ, для создания уникальных идентификаторов всех разделов сайта. Позволяет задавать администраторам настраивать короткие адреса важным страницам сайта.

Как скачать

Бета-версия 20070921:
popoff-light-20070921-beta.zip (1 796 440 байт / 1.7 MB)
Основное изменение: более-менее стабильно работает в РНР5. Дополнительно, добавлены некоторые новые возможности, исправлены некоторые ошибки. Эта промежуточная версия выложена по просьбам посетителей и может содержать ошибки из-за недостаточного тестирования новых возможностей.

Если у Вас есть вопросы относительно инсталяции и использования этой системы, задайте их мне в форуме.

Обратите, пожалуйста, внимание на следующие моменты:

  1. Информация об ошибках и пожелания о расширении возможностей системы с радостью принимаются в форуме.
  2. Если Вы используете эту систему полностью, либо её части, пожалуйста, поставьте ссылку на меня и мой сайт:

    Developed by Yuri Popoff, http://popoff.donetsk.ua/

    или

    Powered by Yuri Popoff, http://popoff.donetsk.ua/

Ссылки

По состоянию на конец октября 2007, система используется на 17 сайтах в Интернете и в локальных версиях в программах «КОИНС.Ломбард» и «КОИНС.Ювелир».

Список сайтов Вы можете найти на сайте нашей студии:
http://style.donetsk.ua/

Ссылки

1. Расстояние Левенштейна
http://ru.wikipedia.org/wiki/...

2. Библиотека mcrypt
http://php.net/mcrypt

3. Библиотека Zlib
http://php.net/zlib

4. Joe Celko. Trees in SQL.
http://www.intelligententerprise.com/001020/celko.shtml

Последняя модификация: 03.06.09 11:33

Обсуждение статьи в форуме

Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>

07.01.06 05:58 yuzik

конечно спасибо что позволили ознакомиться с вашей работой, и в этом случае хозяин-барин по выбору предоставления информации, но мне кажется начальный дамп основных таблиц можно было бы вывести, тем более он не так тяжело создается и записывается в файлик который можно было бы приложить к библиотекам. как то порой проще ручками создать базу а не через скрипт. виднее что делаешь, покрайней мере для меня.

26.06.06 18:28 d dot k dot Brazz

>>Деревья хранятся способом, описанным Joe Celko
Ссылка битая, вот правильная:
http://www.intelligententerprise.com/001020/celko1_1.jhtml

11.05.07 22:29 Иван

Система, конечно, высокого класса. Аж гордость берет за отечественных разработчиков. Только Каптча барахлит на сайте разработчика. Например, со служебного компьютера, я не смог ни зарегистрироваться, ни внести комментарий... В итоге меня заблокировало, а система разблокировки ничего кроме многообещающих обещаний не сделала. Возможно, виною всему прокси-сервер, жрет, гад, заголовки. Но тем не менее...

11.05.07 23:08 popoff

Иван,
IP-адрес, с которого Вы оставили это сообщение, не заблокирован.

Согласно журналу посещений, за сегодня была произведена единственная попытка начать процесс регистрации. Попытка была удачной - с сервера было удачно отправлено почтовое сообщение с просьбой о подтверждении регистрации, о чём имеется отдельная запись в отдельном журнале. IP-адрес, с которого была произведена попытка зарегистрироваться также не заблокирован. Согласно информации whoisinform.ru, IP-адрес, с которого Вы писали сообщение и IP-адрес, с которого начинали процесс регистрации находятся в разных городах.

Согласно журналу блокировок, за сегодня было заблокировано несколько IP-адресов за действия, похожие на действия спам-роботов и один IP-адрес за слишком частые обращения к сайту. Ни с одного из этих адресов никаких обращений к форме регистрации не производилось.

Согласно сверке журнала блокировок и журнала посещений, только с одного из IP-адресов, заподозренных в спаме, было произведено обращение к форме регистрации. Этот IP-адрес подозревается системой в спаме в связи со спам-сообщением, оставленным с этого IP-адреса 2 дня 4 часа назад, то есть 9 мая в 19:04. Я только что проверил вручную. Действительно, в сообщении был спам.

В связи со всем этим думаю, что Вы чего-то не договариваете, либо Вы сами что-то неправильно делаете.

Рекомендую Вам прочитать инструкцию по регистрации:
http://popoff.donetsk.ua/text/work/libs/passport/help/register.html
Также, рекомендую Вам почитать о возможных причинах недержания сессии браузером:
http://popoff.donetsk.ua/text/work/libs/passport/help/nosession.html

Также отмечу, что ничего хитрого, такого что может «жрать» обычный прокси-сервер, в моей системе не используется. Для успешной работы с сайтом требуются только включённые cookie. И наоборот, если Вы сами используете что-то хитрое, то система может это обнаружить и не дать Вам возможности работать с сайтом. Под «хитростями» со стороны клиента чаще всего выступают всякие анонимайзеры.

~~~~~ 11 Май 2007, 23:11 ~~~~~

Да. В журнале регистраций за сегодня записано, что логин принят к регистрации и ожидает подтверждения. Всё работает замечательно.

12.05.07 13:01 Иван

Да, действительно. Приношу свои извинения за неточную информацию.
На Вашем сайте я пробовал только добавить добавить комментарий. До регистрации не дошло.
Вводимые в Каптча-форму данные распознавались неверно, и ответ был что-то вроде что мой браузер не загрузил каптча-картинку.
Потом заблокировало. При попытке разблокировать, портал писал что-то типа, что мой IP has not blocked, но при нажатии на ссылку дальше или при переходе на главную страницу портала, все-равно попадал на страницу заблокирования.
IP - адреса у нас в офисе могут меняться (Укртелекомская система).
Скорее всего я работал с 213.179.252.206 (Forward 195.248.166.54, 195.248.179.193).
Видит Бог - я не спам - робот...

13.05.07 00:08 popoff

Иван,
да, этот адрес был заблокирован системой из-за того, что Ваш браузер не держит сессию и Вы достаточно много ходили по моему сайту. Этот адрес я разблокировал. Увеличил количество кликов, необходимое для блокировки в 5 раз.

13.05.07 01:07 Иван

Иван,
да, этот адрес был заблокирован системой из-за того, что Ваш браузер не держит сессию и Вы достаточно много ходили по моему сайту. Этот адрес я разблокировал. Увеличил количество кликов, необходимое для блокировки в 5 раз.

popoffфорумы popoff.donetsk.ua


Вообще-то, я поочереди пробовал три браузера - IE, FireFox, Opera. Куки везде были включены.
По сайту ходил может быть и много, - это не моя вина, что Ваш сайт содержит массу полезной информации.
Думаю, все дело в IP- адресе.

Когда-то, на виртуал я поставил одну программулинку - http://sourceforge.net/projects/sux0r/
, которая содержит вот такой защитный код

[php]

<?php //..........................................
function setSessionIP() {
    
    if (
getenv("HTTP_CLIENT_IP")) $_SESSION['ip'] = getenv("HTTP_CLIENT_IP");
    else if(
getenv("HTTP_X_FORWARDED_FOR")) $_SESSION['ip'] = getenv("HTTP_X_FORWARDED_FOR");
    else if(
getenv("REMOTE_ADDR")) $_SESSION['ip'] = getenv("REMOTE_ADDR");
    
}

// ----------------------------------------------------------------------
// Check against spoofing...

function ipSecurityCheck() {
    
    if (
getenv("HTTP_CLIENT_IP")){
        if (
$_SESSION['ip'] != getenv("HTTP_CLIENT_IP")) {
            return 
false;       
        }
    }        
    else if (
getenv("HTTP_X_FORWARDED_FOR")){
        if (
$_SESSION['ip'] != getenv("HTTP_X_FORWARDED_FOR")) {
            return 
false;       
        }
    }
    else if (
$_SESSION['ip'] != getenv("REMOTE_ADDR")) {
        return 
false;     
    }
    return 
true;
}
//......................................
?>

[php]

Так та программулинка меня принимала за хакера, пришлось код подрезать. Не знаю в чем дело, но когда на одной странице дважды запрашивается getenv(HTTP_X_FORWARDED_FOR), при втором вызове она показывает не то, что при первом. Отсюда шла сработка системы.

13.05.07 01:26 popoff

HTTP_X_FORWARDED_FOR и HTTP_CLIENT_IP у меня не проверяются вообще. Проверяется только IP-адрес. Да и тот не весь, а только старшие две цифры.

У Вас IP-адрес не меняется.

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

13.05.07 02:41 Иван

OK, в понедельник я буду на том IP, попробую снова...
Кстати, мне нужна помощь. Вопрос я изложил здесь
http://popoff.donetsk.ua/text/work/light/install.html
Использую Денвер с PHP5. В браузер идет исходный код. Перепробовал все что мог - не помогает...

Но очень хочется попробовать. Мне понравился Ваш проект. Такого уровня программу из разряда OpenSource я встречал только один раз. Я говорю о Drupal. Думаю, Ваш проект может легко с ним конкурировать. Очень понятный и хорошо структурированный код.

А идея с блокировкой мне понравилась. Видит Бог - не зря меня заблокировало. Вдохновленный идеей, я на своем сайте то же сделал блокировку. Поставил на всех формах текстовое поле, которое в процессе загрузки скриптом делается невидимым. В браузере его не видно. А роботы в него пишут... ой как пишут... За день несколько дясятков...

Только я сделал на текстовых файлах. Мне важна минимальная нагрузка. Один IP - один файл. Если на протяжении определенного порога времени лимит попаданий в ловушки исчерпан - никаких там разблокировок, - ошибка 404 на пару месяцев, и все!

13.05.07 10:15 popoff

Но очень хочется попробовать.

Иванфорумы popoff.donetsk.ua

Всё, что Вы видите и делаете на этом сайте - это и есть проба этих скриптов ;)

13.05.07 12:29 Иван

Хорошо.
С понедельника я снова целую неделю буду на проблемном IP.
Скорее всего, писать в форум из-за каптчи не смогу. Для обратной связи прошу авторизовать мой запрос на ICQ с номера 392-254-225 (я написал запрос на авторизацию Вам на ICQ в пятницу.

Хотелось бы все-таки услышать мнение разработчика по моей проблеме. Я плохо разбираюсь в Апаче, и не могу справиться с возникшей проблемой. Как сделать, чтоб в браузер не отдавался исходный код? Чтоб начали обрабатываться PHP файлы .html?

31.01.12 15:07 Артем

статья старая, но всетаки еще есть что то в ней интересное
по поводу обучения - я для себя выбрал путь «пойти на курсы» вместо «самоучка», все потому, что небыло особо много времени, что бы во всем самому разбиратся
В свое время выбор пал на курсы в Практикуме http://www.praktikum.com.ua/

13.11.17 20:21 izabel

ну и как? понравились курсы? расскажите

Просмотреть все комментарии в режиме форума. Всего комментариев: 13
Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>