Примеры сохранения и чтения текстовых данных и массивов в файлы.
Функция file_put_contents()
записывает содержимое переменной в файл, если файла не существует. то пытается его создать, если существует то полностью перезапишет его.
File_put_contents:
$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$filename = __DIR__ . '/file.txt';
file_put_contents($filename, $text);
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);
Возможные режимы 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);
Дописать строку в конец файла
$new_str = 'New line of text.';
$filename = __DIR__ . '/file.txt';
file_put_contents($filename, PHP_EOL . $new_str, FILE_APPEND);
Или fopen с флагом «c
»:
Чтение всего файла
$filename = __DIR__ . '/file.txt';
$text = '';
$fh = fopen($filename, 'r');
while (!feof($fh)) {
$line = fgets($fh);
$text .= $line . PHP_EOL;
}
fclose($fh);
echo $text;
Чтение файла в массив
Функция file()
– читает содержимое файла и помещает его в массив, доступны опции:
FILE_IGNORE_NEW_LINES
– пропускать новую строку в конце каждого элемента массива.FILE_SKIP_EMPTY_LINES
– пропускать пустые строки.
Чтение файла сразу в браузер
Получить первую строку из файла
$filename = __DIR__ . '/file.txt';
$fh = fopen($filename, 'r');
echo fgets($fh);
fclose($fh);
/* или */
$filename = __DIR__ . '/file.txt';
$array = file($filename);
echo $array[0];
Первые три строки из файла:
$filename = __DIR__ . '/file.txt';
$array = file($filename);
$first_3 = array_slice($array, 0, 3);
print_r($first_3);
Получить последнюю строку из файла
$filename = __DIR__ . '/file.txt';
$array = file($filename);
$last = array_slice($array, -1);
echo $last[0];
Последние три строки из файла:
$filename = __DIR__ . '/file.txt';
$array = file($filename);
$last_3 = array_slice($array, -3);
print_r($last_3);
Serialize
Не очень удачное хранение данных в сериализованном виде т.к. изменение одного символа может привести к ошибке чтения всех данных в файле. Подробнее в статье «Функция serialize, возможные проблемы»
Запись:
$array = array('foo', 'bar', 'hallo', 'world');
$text = base64_encode(serialize($array));
file_put_contents(__DIR__ . '/array.txt', $text);
Чтение:
JSON
Подробнее в статье «Работа с JSON в PHP».
Запись:
$array = array('foo', 'bar', 'hallo', 'world');
$json = json_encode($array, JSON_UNESCAPED_UNICODE);
file_put_contents(__DIR__ . '/array.json', $json);