Гостевая книга
Вы наверняка неоднократно встречали в Интернете такой сервис, как гостевые книги, т. е .web-страницы, на которых каждый посетитель может оставить свой отзыв, который будет "виден" другим посетителям, впоследствии зашедшим на страницу. Скорее всего, вы думали, что создание гостевой книги требует долгого и сложного программирования.
Не спорю, сделать крупный Интернет-портал, предоставляющий всем желающим гостевые книги для установки на сайт, довольно трудно. Однако на языке программирования РНР организация простой системы оставления сообщений может быть создана всего несколькими строками кода. Причем нетрудно заставить эти строки обслуживать сразу несколько отдельных гостевых книг, скажем, дать посетителям возможность оставлять свои комментарии и отзывы о различных материалах, размещенных на сайте, на тех же самых страницах, на которых эти материалы размещены. Или, допустим, организовать разные книги для разных категорий посетителей.
Данная глава, как вы, наверное, уже поняли, посвящена рассказу о сценарии на РНР для создания простейшей гостевой книги. В главе разобран сценарий, позволяющий сделать на одном сайте несколько гостевых книг. Очевидно, что приспособить его для работы всего одной гостевой книги элементарно.
Схема работы сценария простой гостевой книги такова.
Для хранения сообщений выделена специальная папка, в которой каждое сообщение хранится в отдельном текстовом файле. Для того чтобы можно было различать сообщения, принадлежащие разным гостевым книгам, каждая книга имеет свой индекс (например, "gb01"), который указывается в специальном сценарии в ее тексте. Имя каждого файла с сообщением начинается с этого индекса (см. рис. 9.1).
Поскольку в гостевой книге, как нетрудно догадаться, количество сообщений весьма скоро превысит одно, то файлы с ними нужно еще и последовательно нумеровать. Вернее, не "последовательно", а так, чтобы их можно было отсортировать – наверное, достаточно возможности сортировки лишь по дате появления.
В РНР есть интересная функция – time (); она выдает количество секунд между 1 января 1970 года (этот момент считается началом "эпохи Unix") и текущим временем, так называемую "временную метку Unix". (В настоящее время эта величина – чуть больше миллиарда.) Посмотрите – если имя файла с сообщением составлять из индекса гостевой книги и временной метки Unix (см. рис. 9.1), то, во-первых, каждое сообщение будет обладать своим уникальным именем (посылка нескольких сообщений в гостевую книгу разными пользователями в одну и ту же секунду теоретически возможна, но маловероятна), а, во-вторых, их легко можно будет отсортировать по времени появления (время ведь вспять не течет – каждое новое сообщение будет получать большую метку, нежели любое предыдущее).
Бесспорно, так как сортировка имен, состоящих из индекса и временной метки, будет проводиться по законам сортировки строк (т. е., скажем, 21 будет стоять раньше 3 при сортировке по возрастанию – т. к. сравнение ведется с начала строки), то при увеличении разрядности временной метки новые сообщения окажутся посреди старых. Однако какие-либо проблемы в нашем случае начнутся не раньше момента достижения временной меткой значения в 10 миллиардов, а до него еще больше, чем две с половиной сотни лет…
Рис. 9.1. Гостевая книга – все ее файлы