Intereting Posts
PHP – использование даты, чтобы узнать о летнее время Ограничение попыток входа пользователя в PHP Не удалось установить соединение с базой данных; Недопустимое имя источника данных (только с PDO) Не удалось получить соединение: php_network_getaddresses: getaddrinfo не удалось: имя или услуга неизвестны Как преобразовать таблицу parent-child (смежность) в вложенный набор с использованием PHP и MySQL? извлекать данные из базы данных mysql на основе типов отпуска, таких как Exam, Unpaid, Annual Получить изображениеjpeg для правильного отображения как поместить каждое значение php foreach в каждый jquery ajax Slim PUT возвращает NULL file_exists () возвращает false, но файл существует Рассчитывать месяцы, годы и дни между двумя заданными датами как временная метка Как отправлять PHP Fatal Errors только? Видимость элементов PHP5 Кодировать / сжимать последовательность повторяющихся целых чисел Проверьте, находится ли текущее время в два раза, с возможностью притирки дней

блокировка файлов в php

У меня был новичок (ближайший подросток), напишите какой-нибудь php-код, чтобы отслеживать некоторые действия на моем веб-сайте. Я не знаком с php, поэтому я немного спрашиваю о совместном доступе к файлам.

Мое родное приложение (в Windows) иногда записывает некоторые данные на мой сайт, удаляя URL-адрес, содержащий мой php-скрипт. Собственное приложение не проверяет возвращенные данные.

$fh = fopen($updateFile, 'a') or die("can't open file"); fwrite($fh, $ip); fwrite($fh, ', '); fwrite($fh, $date); fwrite($fh, ', '); fwrite($fh, implode(', ', $_GET)); fwrite($fh, "\r\n"); fclose($fh); 

Это низкий сайт трафика, и данные не являются критическими. Но что произойдет, если два пользователя столкнутся, а два экземпляра сценария попытаются добавить строку в файл? Есть ли скрытая блокировка файлов в php?

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

Solutions Collecting From Web of "блокировка файлов в php"

Вы должны поместить замок в файл:

 <?php $fp = fopen($updateFile, 'w+'); if(flock($fp, LOCK_EX)) { fwrite($fp, 'a'); flock($fp, LOCK_UN); } else { echo 'can\'t lock'; } fclose($fp); 

Поскольку это добавление к файлу, лучшим способом было бы агрегировать данные и записать их в файл в один файл fwrite (), при условии, что данные, которые будут записаны, не будут больше, чем буфер файлов. Конечно, вы не всегда знаете размер буфера, поэтому flock (); всегда хороший вариант.