Php прочесть содержимое файла

Запись и чтение файлов в PHP: как это работает, как использовать, примеры

Для открытия конкретного файла в языке PHP используется функция fopen(), для закрытия — fclose(). Давайте рассмотрим примеры и узнаем подводные камни, которые могут подстерегать программиста при их использовании.

fopen() и fgets()

Итак, fopen() — функция в PHP, которая используется для открытия файла. Впрочему, понять это несложно даже из её названия.

Если функция выполняется успешно, она возвращает указатель на файл (файловый дескриптор). Сразу небольшой пример:

Не стоит путать функцию fopen() и функцию fgets() — подробнее о ней мы поговорим ниже.

Простыми словами, fopen-функция используется для открытия файла (для последующего его чтения, либо — для записи).

Важный момент: fopen() лучше, чем readfile() справляется с файловыми операциями.

fсlose

Функция fсlose() используется для закрытия ранее открытого файла. При этом потребуется дескриптор файла, который мы хотим закрыть.

Обязательно закрывайте все файлы, после окончания работы с ними. Иначе они будут занимать серверные ресурсы.

Чтение

Для чтения файла полностью, построчно или поблочно в PHP применяются разные функции. Все ниже разобранные варианты дают тонкий контроль над файлом, который нужно прочитать. Если же требуются «сырые», двоичные данные, то имеет смысл пользоваться функциями более высокого уровня.

Функция fgets()

Функция fgets() применяется для построчного чтения. Сама функция принимает в качестве аргумента файловый дескриптор и возвращает следующую строку из файла. Выглядит это так:

Важно: символ новой строки в конце также включается в возвращаемое значение.

Простыми словами, функция fgets позволяет считать одну строку из файла.

Функция fgets() принимает два аргумента: файловый дескриптор (обязательный) и длина считываемой строки в байтах (необязательный).

1. File — файловый дескриптор, из которого считывается строка.

2. Length — опциональный параметр для указания суммарного числа байт, которые нужно прочитать.

Ниже мы дадим два несложных примера.

(В этом блоке осуществляется чтения полного содержимого первой строки из файла).

Читайте также:  Многопоточный парсер python selenium

Можно задать количество байт для чтения из файла (опциональный аргумент length, о котором мы говорили выше):

Используйте этот пример для чтения всех строк из файлов по одной с помощью цикла for.

Нужно определить окончание файла? Нет ничего проще: используйте функцию feof(). Вот как это выглядит:

Синтаксис функции

Функция fgets использует следующий синтаксис:

Функция file_get_contents()

Функция file_get_contents() полностью считывает содержимое файла в одну строку.

file_get_contents() является наиболее удобным инструментом для чтения содержимого файла в строку

Для улучшения производительности эта функция поддерживает memory mapping (вывод в память). Если сервер поддерживает memory mapping, то использовать file_get_contents() можно еще более эффективно.

Синтаксис функции выглядит следующим образом:

file_get_contents(path,include_path,context,start,max_length).

Итак, функция file_get_contents считывает содержимое файла в строку, содержащую все строки из файла, разделенные символами новой строки.

Функция fread()

Функция fread() используется для поблочного чтения. Принцип действия такой же, как у функции readfile().

fread() выполняет чтение из открытого файла. При этом, чтение может быть остановлено в конце файла или при достижении заданной длины (в зависимости от того, какое из этих двух условий наступит первым). В случае успеха — возвращается прочитанная строка. В случае неуспеха — происходит возврат false.

Запись

Для записи файлов в PHP используется функция fwrite и ее псевдоним fputs.

fwrite()

Функция fwrite используется для непосредственной записи файлов. Другими словами, используя её, вы можете записывать данные в новый файл или добавлять их в существующий файл.

Функция fwrite() имеет следующий синтаксис:

Чуть подробнее о параметрах:

  • $handle — это файловый дескриптор.
  • $string — это данные, которые будут записаны в файл.
  • $length — необязательный параметр, который может использоваться для уточнения количества записываемых байтов.

Функция fwrite принимает два параметра — файловый дескриптор и строку данных, которые должны быть записаны. Вот как это может выглядеть:

Пример использования fwrite()

Пример использования fwrite()

fputs()

Это псевдоним функции fwrite. Другими словами, он может использоваться идентично функции fwrite.

Функция fputs идентична fwrite во всех отношениях.

Обратите внимание: параметр длины является необязательным, и если он не указан, то будет записана вся строка.

bool fputs(resource file_handle, string data, [int bytes])

TRUE при успехе; FALSE — при ошибке.

  • file. Обязательный параметр. Ссылается на файл для записи.
  • string. Обязательный параметр. Ссылается на конкретную строку для записи в файл.
  • length. Опциональный параметр. Обозначает максимальный размер в байтах.

Указатель и взаимодействие с ним

Для работы с указателем мы разберем только одну функцию — fseek. Она позволяет провести поиск в любом файле.

Читайте также:  Как научиться html языку

fseek()

По сути функция используется для одной цели — для перемещения указателя в файле (задаётся точное число байт для смещения).

fseek() позволяет переместить указатель как вперёд, так и назад

В случае успешного выполнения — происходит возврат нуля, в противном случае возвращается -1.

Взглянем на важные параметры этой функции:

  • file. Обязательные параметр — файловый дескриптор.
  • offset. Обязательный параметр, задающий смещение текущей позиции в файле.
  • whence. Опциональные параметр, который может иметь три значения:
  1. SEEK_SET. Это значение используется по умолчанию. По сути, это установка смещения в offset байт.
  2. SEEK_END. Используется для установки позиции в самый конец файла плюс offset (offset должен быть отрицательным числом).
  3. SEEK_CUR. Используются для установки позиции в текущее положение плюс offset.

Рекомендация: если вам необходимо узнать текущую позицию в файле, примените функцию ftell().

Профессия веб-разработчика остается одной из самых популярных в 2023 году. PHP — лишь часть широкого стека, который задействован в этом направлении. Успейте попасть в группу!

Источник

Запись и чтение файлов в PHP

Примеры сохранения и чтения текстовых данных и массивов в файлы.

Сохранение в файл

Функция 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 ».
Читайте также:  Class java lang integer cannot be cast to class java lang long

Доступно в место 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);

Запись и чтение массивов в файл

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

Запись:

$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);

Источник

Оцените статью