17 марта, 2011

PHP

PHP, запись в файл

Если нужно записать в файл текстовые данные, то можно использовать функцию file_put_contents('file.txt', 'data');, которая идентична последовательным успешным вызовам функций fopen(), fwrite(), fclose().

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

Если в файл необходимо записать не строку, а php массив, то перед запись его нужно кодировать, смотрите статью PHP, запись массива в текстовый файл (кэширование массива в файл).

PHP запись текстовых данных в файл с блокировкой

// Данные для записи: время-дата и перенос строки
$sometext = date('H:i:s Y-m-d');
$sometext .= "\n";

// Запись
$fopen = fopen($_SERVER['DOCUMENT_ROOT']."/txt.txt", 'ab'); // Откроем файл в режиме ab — смотрите режимы в таблице ниже
// Проверяем открылся или нет
if (!$fopen)
{
    echo "Не открылся";
}
// Если открылся
else
{
    flock($fopen, LOCK_EX); // Блокируем доступ
    if (fwrite($fopen, $sometext) === FALSE) // Записываем и проверяем „успешность“ записи
    {
        echo "Не записалось";
    }
}
flock($fopen, LOCK_UN); // Разблокируем
fclose($fopen); // Закрываем

"\n" — обязательно в двойных кавычках, иначе записывает как текст

Если сервер под виндой символ переноса: \r\n, ну а если под макинтошем \r

$_SERVER['DOCUMENT_ROOT']."/txt.txt" — путь к файлу, с некоторыми настройками сервера может не понять просто "/txt.txt" или "txt.txt", а с $_SERVER['DOCUMENT_ROOT'] поймет везде.

Режимы для fopen():

  чтение запись указатель содержимое создание файла
r
+
-
начало оставляет
-
r+
+
+
начало оставляет
-
w
-
+
начало удаляет
+
w+
+
+
начало удаляет
+
a
-
+
конец оставляет
+
a+
+
+
конец оставляет
+
x
-
+
начало ошибка (файл не должен существовать)
+
x+
+
+
начало ошибка (файл не должен существовать)
+

Если вы явно не укажете флаг 'b' во время работы с бинарными файлами, вы можете столкнуться со странной порчей ваших данных, включая испорченные файлы изображений и странные проблемы с символами \r\n.


Добавить комментарий

2010–2019 Блог Максима Златова, контакты

PHP execution time: 0.0080 s.
SQL execution time: 0.0001 s. (select publication with comments)

Яндекс.Метрика