Сейчас: 09:51:48   29-го марта 2024 г.
UsefulScript.ruСкриптыЗащита сайтаБлокировка файлов от записи
2
15

Блокировка файлов от записи на PHP

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


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


Для блокировки и разблокировки файлов мы рекомендуем Вам использовать стандартную функцию PHP flock() с флагами LOCK_EX и LOCK_UN. Флаг LOCK_EX используется для эксклюзивной блокировки файла (т.е. доступ к файлу будет доступен только процессу, поставившему блокировку), а LOCK_UN - для снятия блокировки с файла.


Чтобы было понятнее, давайте рассмотрим пример блокировки и разблокировки файла file.txt:

PHP код:
<?php
$fh
=fopen("file.txt""a+");    //открываем для чтения/записи
flock($fhLOCK_EX);    //блокируем файл
fseek($fh0);    //ставим указатель на начало файла
while (!feof($fh)) $line. = fread($fh,2048);    //считываем данные

//здесь производим обработку считанных данных

ftruncate($fh0);    //очищаем файл
fwrite($fh$Res_$line);    //записываем данные
flock($fhLOCK_UN);    //снимаем блокировку
fclose($fh);    //закрываем файл
?>

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


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


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

Дата создания: 21:23:25 20.10.2012 г.
Посещений: 7197 раз(а).

Закрыть
Ваше имя:
515 + 3 =
Добавить комментарий:
Ваше имя:
515 + 3 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 4

Мешает ли Вам реклама?