Примеры сохранения и чтения текстовых данных и массивов в файлы.
Функция 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»:
$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);
Чтение всего файла
$filename = __DIR__ . '/file.txt';
$text = file_get_contents($filename);
echo $text;
$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';
$array = file($filename);
print_r($array);
Чтение файла сразу в браузер
$filename = __DIR__ . '/file.txt';
readfile($filename);
Получить первую строку из файла
$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);
Чтение:
$array = unserialize(base64_decode($text));
print_r($array);
JSON
Подробнее в статье «Работа с JSON в PHP».
Запись:
$array = array('foo', 'bar', 'hallo', 'world');
$json = json_encode($array, JSON_UNESCAPED_UNICODE);
file_put_contents(__DIR__ . '/array.json', $json);
Чтение:
$json = file_get_contents(__DIR__ . '/array.json');
$array = json_decode($json, true);
print_r($array);





