Запись и чтение файлов в PHP

Примеры сохранения и чтения текстовых данных и массивов в файлы.

1

Функция file_put_contents() записывает содержимое переменной в файл, если файла не существует. то пытается его создать, если существует то полностью перезапишет его.

File_put_contents:

$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$filename = __DIR__ . '/file.txt';

file_put_contents($filename, $text);
PHP

Fopen / fwrite:

Набор функций fopen, fwrite, fclose предназначены для более гибкой работы с файлами.

  • fopen – открытие или создание файла.
  • fwrite – запись данных.
  • fclose – закрытие файла.
$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$filename = __DIR__ . '/file.txt';

$fh = fopen($filename, 'w');
fwrite($fh, $text);
fclose($fh);
PHP

Возможные режимы fopen():

Mode Описание
r Открывает файл только для чтения, помещает указатель в начало файла.
r+ Открывает файл для чтения и записи, помещает указатель в начало файла.
w Открывает файл только для записи, помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует – пробует его создать.
w+ Открывает файл для чтения и записи, помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует – пытается его создать.
a Открывает файл только для записи, помещает указатель в конец файла. Если файл не существует – пытается его создать.
a+ Открывает файл для чтения и записи, помещает указатель в конец файла. Если файл не существует – пытается его создать.
x Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт false и выдаст ошибку. Если файл не существует, попытается его создать.
x+ Создаёт и открывает для чтения и записи, в остальном имеет то же поведение, что и «x».
c Открывает файл только для записи. Если файл не существует, то он создаётся. Если же файл существует, то он не обрезается (в отличие от «w»), и вызов к этой функции не вызывает ошибку (также как и в случае с «x»). Указатель на файл будет установлен на начало файла.
c+ Открывает файл для чтения и записи, в остальном имеет то же поведение, что и «c».

Доступно в место fwrite() используют fputs(), разницы ни какой т.к. эта функция является псевдонимом.

Дописать строку в начало файла

$new_str = 'New line of text.';
$filename = __DIR__ . '/file.txt';

$text = file_get_contents($filename);
file_put_contents($filename, $new_str . PHP_EOL . $text);
PHP

Дописать строку в конец файла

$new_str = 'New line of text.';
$filename = __DIR__ . '/file.txt';

file_put_contents($filename, PHP_EOL . $new_str, FILE_APPEND);
PHP

Или fopen с флагом «c»:

$new_str = 'New line of text.';
$filename = __DIR__ . '/file.txt';

$fh = fopen($filename, 'c');
fseek($fh, 0, SEEK_END); 
fwrite($fh, PHP_EOL . $new_str); 
fclose($fh);
PHP
2

Чтение всего файла

$filename = __DIR__ . '/file.txt';
$text = file_get_contents($filename);
echo $text;
PHP
$filename = __DIR__ . '/file.txt';

$text = '';
$fh = fopen($filename, 'r');
while (!feof($fh)) {
	$line = fgets($fh);
	$text .= $line . PHP_EOL;
}
fclose($fh);

echo $text;
PHP

Чтение файла в массив

Функция file() – читает содержимое файла и помещает его в массив, доступны опции:

  • FILE_IGNORE_NEW_LINES – пропускать новую строку в конце каждого элемента массива.
  • FILE_SKIP_EMPTY_LINES – пропускать пустые строки.
$filename = __DIR__ . '/file.txt';
$array = file($filename);
print_r($array);
PHP

Чтение файла сразу в браузер

$filename = __DIR__ . '/file.txt';
readfile($filename);
PHP

Получить первую строку из файла

$filename = __DIR__ . '/file.txt';
$fh = fopen($filename, 'r');
echo fgets($fh);
fclose($fh);

/* или */
$filename = __DIR__ . '/file.txt';
$array = file($filename);
echo $array[0];
PHP

Первые три строки из файла:

$filename = __DIR__ . '/file.txt';
$array = file($filename);
$first_3 = array_slice($array, 0, 3);
print_r($first_3);
PHP

Получить последнюю строку из файла

$filename = __DIR__ . '/file.txt';
$array = file($filename);
$last = array_slice($array, -1);
echo $last[0];
PHP

Последние три строки из файла:

$filename = __DIR__ . '/file.txt';
$array = file($filename);
$last_3 = array_slice($array, -3);
print_r($last_3);
PHP
3

Serialize

Не очень удачное хранение данных в сериализованном виде т.к. изменение одного символа может привести к ошибке чтения всех данных в файле. Подробнее в статье «Функция serialize, возможные проблемы»

Запись:

$array = array('foo', 'bar', 'hallo', 'world');

$text = base64_encode(serialize($array));
file_put_contents(__DIR__ . '/array.txt', $text);
PHP

Чтение:

$array = unserialize(base64_decode($text));
print_r($array);
PHP

JSON

Подробнее в статье «Работа с JSON в PHP».

Запись:

$array = array('foo', 'bar', 'hallo', 'world');

$json = json_encode($array, JSON_UNESCAPED_UNICODE);
file_put_contents(__DIR__ . '/array.json', $json);
PHP

Чтение:

$json = file_get_contents(__DIR__ . '/array.json');
$array = json_decode($json, true);
print_r($array);
PHP
14.05.2021
64123

Комментарии 3

Рустам Уразов Рустам Уразов
6 мая 2022 в 18:32
Добрый день, как можно в текстовый файл записать данные нескольких текстовых файлов?
anatoliyrnd anatoliyrnd
23 января 2023 в 20:58
Думаю собрать их в массив и записать ввиде json.
Roman Anishchenko Roman Anishchenko
26 января 2023 в 13:57
такая запись читабельнее для массива file_put_contents(__DIR__ . '/log.txt', print_r($paymentForSign, 1), 8);

, чтобы добавить комментарий.

Другие публикации

Синхронизация файлов между сайтами с помощью Rsync
Такой вопрос возникает когда у сайта есть копия, например региональный сайт или сайт на другом языке, но при этом база...
5829
+2
Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
20107
+2
Загрузка файлов на сервер PHP
В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.
74781
+24
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
58835
+20
Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
238335
+21
Работа с JSON в PHP
JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и...
122074
+15