Виртуальный Брест
Главная Портал Форум Рассылки Контакт Для клиентов Статьи

Поддержи инвалидов по зрению
Поддержи инвалидов по зрению
 
Реклама на светодиодных экранах
Реклама на светодиодных экранах
 
 

Виртуальный хостинг - дом для вашего сайта - лучшее предложение в Бресте!


Полный список глав книги

Блокируемся


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

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

Он уже описывался выше, так что сразу перейдем к делу. Для того, что бы записать новое значение показания счетчика в файл, мы должны его сначала обнулить. И как бы быстро после этого не происходила запись нового значения, нет никакой гарантии, что в это время другой процесс РНР (окно браузера другого посетителя) в это время не считает пустой файл, и не присвоит переменной счетчика значение нуля. После этого второй процесс запишет в файл число 1, так как будет считать, что считанное 0.

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

В реальной ситуации я с таким поведением просто не сталкивался хотя, может просто было мало обращений к сайту? Эта ситуация возможна только в том случае, когда перед записью в файл идет его обнуление (например так: $f=fopen("counter.txt","w+"); // открыли файл на запись и обнулили его).

Символ W+ указывает, что перед записью в файл его необходимо обнулить (удалить все его содержимое). Это очень удобно, так как позволяет не заботиться о содержимом файла, куда предполагается сделать запись. Но именно это ведет к появлению описанной выше неопределенности.

Собственно, решение этого вопроса очень простое. В РНР есть команда flock(дескриптор, режим). Используется эта команда именно для блокировки доступа к определенному файлу (дескриптор на него должен быть открыт, например - командой fopen). Режим может принимать такие значения:

  • 1 - другие процессы могут отрыть только в режиме чтения
  • 2 - другие процессы ничего не могут
  • 3 - снять блокировку

Для нашего примера нужно написать так:

flock($f,2); // заблокировали файл;

И, когда блокировка перестает быть нужна:

flock($f,3); // сняли блокировку;

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

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

Стоит заметить, что в последних версиях PHP этот процесс автоматизирован. Может быть, именно поэтому мне так и не довелось наблюдать эту ситуацию. Но знать слабые стороны нужно. И тут же хочу дать один совет-предупреждение. Если у Вас стоит ограничение на занимаемое место, следите за его объемом очень внимательно – если скрипту не хватит места сделать запись, он обнулит файл и ничего в него не запишет. А все Ваши прежние данные будут просто утеряны. Часто к месту на сайте плюсуются всякие логи, почта и т.д. Это тоже надо учитывать в своей работе.

Читать еще...



Джен Крамер

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

М. Гришаев, Р. Прокди

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

Б. Лоусон, Р. Шарп

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

Дмитрий Ляпин, Александр Никитин

PHP - это просто. Начинаем с видеоуроков (+ CD-ROM)
Для быстрого освоения PHP «с нуля» выполните следующее:-вначале прослушайте первый видеоурок и повторите практический пример,-затем прочитайте первую главу...

    Информация

Главная - переход на начало
Тарифы на Российский хостинг
Правила - что можно а что нет
Заказ - сделайте это сейчас
Выбор домена - найди свое имя
Регистрация домена - купить
Оплата - варианты для всех
Панель управления Россия
Панель управления Беларусь
Вопросы и ответы - информация
Разработка сайтов - сопровождение
Виртуальный Брест - портал
Контакт - обратная связь
Наш форум - пообщаемся?

Список доменов
в которых доступна бесплатная регистрация имен при покупке хостинга, а так же открытие поч- тового ящика:

Новости Бреста:

Второй порыв теплосетей в Бресте - двенадцать многоэтажных домов и один детский сад остались без тепла
Почти тонну мёда задержали налоговики при проверке в Бресте
Зарплата в конвертах в Бресте - видео
Трое жителей Кавказа в "поисках работы" забрались прямо в лес в пограничную зону
Профилактика квартирных краж - важно
Современный животноводческий комплекс на 1500 голов строится в СПК "Королевский" Кобринского района - фото
Результаты проходящей на территории Брестской области акции "Не упусти свой шанс"
Осенний месячник по наведению порядка на земле проходит на Брестчине - важно
В Лунинецком районе в водоеме нашли автомобиль с телом внутри
ГАИ: брестчанин решил стать маршрутчиком и в пьяном состоянии вез горожан

© Виртуальный Брест 2001 - 2009 Автор проекта: Андрей Кухарчик Дизайн: Partgraphic