Работа с текстовыми файлами в скриптах PHP
Основные операции с текстовыми файлами
Самый простой способ: file_get_contents и file_put_contents
Как прочитать весь файл в строку или записать строку в файл?
<?php
$content = file_get_contents('file.txt');
echo $content;
?>Php get extension (получение информации о файлах в php)
Функция file_get_contents считывает содержимое файла в строку. Для записи применяется file_put_contents:
<?php
$data = "Новая строка\n";
file_put_contents('file.txt', $data);
?>Index php file 1 (работа с файлами и папками на php)
Если файл не существует, file_put_contents создаёт его. По умолчанию запись перезаписывает файл. Чтобы добавить данные, используется флаг FILE_APPEND:
<?php
file_put_contents('log.txt', date('Y-m-d H:i:s')."\n", FILE_APPEND);
?>
Php запись в файл (запись в файл php)
Типичные проблемы
- Файл не найден или нет прав доступа – возвращается
false. Решение: проверять результат и использовать@или исключения. - Большие файлы –
file_get_contentsзагружает всё в память, что может привести к исчерпанию памяти. Для больших файлов лучше читать построчно. - Кодировка: по умолчанию не преобразуется. Для работы с UTF-8 нужно убедиться, что файл сохранён в нужной кодировке.
Как открыть файл для чтения и записи с помощью fopen?
Более гибкий способ: fopen / fwrite / fclose
<?php
$handle = fopen('info.txt', 'r'); // режим чтения
if ($handle) {
while (($buffer = fgets($handle)) !== false) {
echo $buffer;
}
fclose($handle);
} else {
echo 'Не удалось открыть файл';
}
?>Php изменить файл (изменение файла в php)
Режимы: 'r' чтение, 'w' запись (с обнулением), 'a' добавление, 'r+' чтение и запись с начала, 'w+' чтение и запись с обнулением, 'a+' чтение и запись в конец.
Ошибка: если файл недоступен для записи, fopen вернёт false. Всегда проверять дескриптор. Также не забывать закрывать файл fclose для освобождения ресурсов.
Как записать строку с помощью fputs?
fputs – синоним fwrite:
<?php
$fp = fopen('data.txt', 'a');
fputs($fp, "Новая запись\n");
fclose($fp);
?>Php несколько файлов (несколько файлов в php)
Как прочитать файл в массив строк с помощью file?
Функция file читает файл в массив, каждая строка – элемент массива:
<?php
$lines = file('list.txt');
foreach ($lines as $lineNum => $line) {
echo "Строка $lineNum: $line<br>";
}
?>найти файл php (поиск файла php)
Проблема: сохраняет символы конца строки. Можно использовать флаг FILE_IGNORE_NEW_LINES.
$lines = file('list.txt', FILE_IGNORE_NEW_LINES);проверка файлов php (проверка файлов php)
Как читать файл построчно с помощью fgets?
Подходит для больших файлов, так как не загружает всё в память.
<?php
$handle = fopen('large.log', 'r');
if ($handle) {
while (($line = fgets($handle)) !== false) {
// обработка строки
echo $line;
}
fclose($handle);
}
?>Php папка файла (папка файла php)
Как использовать SplFileObject?
Объектно-ориентированный интерфейс:
<?php
$file = new SplFileObject('config.ini');
while (!$file->eof()) {
$line = $file->fgets();
echo $line;
}
?>
Методы: fwrite, fread, flock и другие.
Расширенные примеры работы с текстовыми файлами
Чтение CSV файла и вывод таблицы
<?php
$csv = 'data.csv';
$handle = fopen($csv, 'r');
if ($handle) {
echo "<table border='1'>";
while (($row = fgetcsv($handle, 1000, ',')) !== false) {
echo "<tr><td>" . implode('</td><td>', $row) . "</td></tr>";
}
echo "</table>";
fclose($handle);
}
?>
Результат для файла с двумя записями (name,age):
<table border='1'><tr><td>Alice</td><td>30</td></tr><tr><td>Bob</td><td>25</td></tr></table>
Запись с блокировкой flock
<?php
$fp = fopen('shared.txt', 'a');
if (flock($fp, LOCK_EX)) {
fwrite($fp, "Данные с блокировкой\n");
flock($fp, LOCK_UN);
}
fclose($fp);
?>
Блокировка предотвращает одновременную запись из нескольких процессов.
Чтение большого файла по частям с fread
<?php
$fp = fopen('huge.log', 'r');
$chunkSize = 8192;
while (!feof($fp)) {
$chunk = fread($fp, $chunkSize);
// обработка фрагмента
echo $chunk;
}
fclose($fp);
?>
Позволяет обрабатывать файлы размером больше доступной памяти.
Запись с использованием контекста stream_context_create
<?php
$options = [
'http' => [
'method' => 'POST',
'content' => 'data',
'header' => "Content-type: text/plain\r\n"
]
];
$context = stream_context_create($options);
$result = file_put_contents('php://output', 'Пример', 0, $context);
?>
Контексты задают дополнительные параметры для потоков.
Обработка ошибок с помощью исключений и SplFileObject
<?php
try {
$file = new SplFileObject('missing.txt', 'r');
while (!$file->eof()) {
echo $file->fgets();
}
} catch (RuntimeException $e) {
echo 'Ошибка: ' . $e->getMessage();
}
?>
Если файл не существует, возникает исключение RuntimeException.