Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab1_php.doc
Скачиваний:
3
Добавлен:
27.08.2019
Размер:
113.15 Кб
Скачать

Смотри примеры № № 5, 7

Сбрасывание на диск содержимого файлового буфера fflush.

bool fflush (resource handle)

Записывает на диск все изменения, которые были произведены с файлом, на который указывает handle. То есть сохранят текущее состояние файла из буфера ввода/вывода на диск. Возвращает true в случае успешного выполнения, в случае ошибки возвращает false.

Пример 12 Использование fflush

<?php

$fp = fopen('/tmp/somefile.txt', 'r+');

fwrite($fp, $some_text); // Записали данные

fflush($fp); // Гарантировано записали данные

... // Выполняем какие-то действия с файлом

fclose($fp);

?>

Блокировка файла – flock.

bool flock (resource handle, int operation)

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

flock() используется для блокировки файла, на который указывает handle (файл должен быть открытым). operation принимает одно из следующих значений:

- LOCK_SH – разделяемая блокировка (разделяемый доступ для чтения). Вызов функции с этим параметром блокирует процесс, пока не будет получено разрешение на разделяемую блокировку.

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

- LOCK_UN – снять блокировку (разделяемую или исключительную).

Вызов функции flock с первыми двумя параметрами приостанавливает выполнение программы до тех пор, пока процесс не получит блокировку, если такое поведение нежелательно, используйте эти параметры совместно с LOCK_NB, чтобы не останавливать выполнение программы (например LOCK_EX+LOCK_NB).

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

Пример 13 Использование исключительной блокировки

<?php

$fp = fopen("/tmp/lock.txt", "w+");

flock($fp, LOCK_EX);// Ждем разрешение на исключительную

// блокировку и потом устанавливаем ее

// Программа не получит управления от функции

// flock(),пока не будет установлена блокировка

fwrite($fp, "Записываем что-либо\n");

flock($fp, LOCK_UN); // снимаем блокировку

fclose($fp);

?>

Пример 14 Блокировка без ожидания

<?php

$fp = fopen("/tmp/lock.txt", "w+");

$i = 0;

while(!flock($fp, LOCK_EX+LOCK_NB)){

$i++;

echo 'Попытка #' . $i . "\n";

sleep(1);

}

// Блокировка получена

fwrite($fp, "Записываем что-либо\n");

flock($fp, LOCK_UN); // снимаем блокировку

fclose($fp);

?>

Закрытие файла – fclose.

bool fclose (resource handle)

Закрывает файл, на который указывает handle. Возвращает true при успешном закрытии или false в случае ошибки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]