Функция file_put_contents()
записывает содержимое переменной в файл, если файла не существует. то пытается его создать, если существует то полностью перезапишет его.
$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$filename = __DIR__ . '/file.txt';
file_put_contents($filename, $text);
Набор функций 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():
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);
$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);
Не очень удачное хранение данных в сериализованном виде т.к. изменение одного символа может привести к ошибке чтения всех данных в файле.
$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);
$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);