olfaer.ucoz.net
новости азартной индустрии
[ Личные сообщения() · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
PHP: Безопасная работа с файлами. Пример счетчика
ОлфаерДата: Вторник, 14 Июня 2011, 08:24 | Сообщение # 1
Маршал
Группа: Гл. Администраторы
Сообщений: 30
Статус: :-(
PHP без работы с файлами неинтересен. Динамика на сайтах обеспечивается различными счетчиками, голосованиями, рейтингами, опросами, комментариями посетителей. Разумеется, для всего этого можно использовать базы данных, например, MySQL, но не везде они есть.

Рассмотрим пример простейшего счетчика:



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

Например, первый скрипт прочитал значение счетчика, увеличил на единицу и открыл файл для перезаписи. В этот момент второй скрипт прочитал значение счетчика из пустого файла (параметр «w» указывает на то, что открываемый файл становится пустым). Ошибочное чтение обнулило значение счетчика во втором скрипте. Первый скрипт записал в открытый файл правильное значение счетчика и закрыл файл. Второй скрипт увеличил значение счетчика на единицу: 0 + 1 = 1 и записал в файл это число. Таким образом, мы потеряли правильное значение счетчика.

Эту проблему можно решить, используя функцию flock(), но она не будет работать под IIS от Microsoft.

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



Рассмотрим подробнее функции cre_t() и del_t().



Цикл в функции cre_t() работает до тех пор, пока существует файл-ловушка. Чтобы не происходило бесконечного зацикливания, добавлена проверка времени создания файла-ловушки. Если файл-ловушка существует более 5 секунд, то удаляем его самостоятельно. Установка атрибута 0666 на файл-ловушку позволяет различным скриптам удалять этот файл.

Описанный метод обеспечивает приемлемую защиту для безопасной работы с файлами. Но, разумеется, 100% безопасность возможна лишь с использованием базы данных и встроенной команды LOCK_TABLE.
Прикрепления:




Сообщение отредактировал Олфаер - Вторник, 14 Июня 2011, 08:25
 
  • Страница 1 из 1
  • 1
Поиск:

Сайт полностью бесплатный