Работа с текстовыми файлами в скриптах PHP

Раздел: Программирование на 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 и другие.

- массив файлов php (массив файлов в php)
- Php текстовый файл (текстовый файл php)
- Php удалить файл (удаление файла в php)

Расширенные примеры работы с текстовыми файлами

Чтение 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.

Текстовый файл PHP - comments

En
Php текстовый файл (php)