- •Размещение файлов на сервере
- •Задание
- •Теория и примеры
- •1 Загрузка (upload) файлов на сервер
- •Upload_err_ok – значение: 0. Отсутствие ошибки, признак успешной загрузки файла
- •Upload_err_no_tmp_dir – значение: 6. Отсутствует директория для временного сохранения файла
- •Обработка загруженного файла
- •2 Обработка данных формы
- •3 Работа с файлами
- •Пример 7 Чтение в строку файла с удаленной машине
- •Пример 8 Открытие и запись в файл с контролем ошибок
- •Чтение строки из файла fgets.
- •Достигнут ли конец файла – feof.
- •Смотри примеры № № 5, 7
- •Смотри примеры выше
- •4 Работа с датой и временем
- •5 Регулярные выражения
Смотри примеры № № 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 в случае ошибки.