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 — опциональный параметр для указания суммарного числа байт, которые нужно прочитать.

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

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

Можно задать количество байт для чтения из файла (опциональный аргумент 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. Она позволяет провести поиск в любом файле.

fseek()

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

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

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

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

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

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

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

Источник

fgetss

Эта функция объявлена УСТАРЕВШЕЙ, начиная с PHP 7.3.0 и была УДАЛЕНА в версии PHP 8.0.0. Использовать эту функцию крайне не рекомендуется.

Описание

Функция идентична функции fgets() , за исключением того, что fgetss() удаляет любые NULL-байты, HTML- и PHP-теги из прочитанной строки. Функция сохраняет состояние синтаксического анализа от вызова к вызову и поэтому не эквивалентна вызову strip_tags() для возвращаемого значения fgets() .

Список параметров

Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen() (и всё ещё не закрытый функцией fclose() ).

Можно использовать третий необязательный параметр для указания тегов, которые не нужно вырезать. Смотрите описание strip_tags() для более подробной информации о allowable_tags .

Возвращаемые значения

Возвращает строку длиной до length — 1 байт, прочтённых из файла, на который указывает дескриптор handle , с вырезанными тегами HTML и PHP.

В случае возникновения ошибки возвращает false .

Примеры

Пример #1 Построчное чтение PHP-файла

$handle = @ fopen ( «sample.php» , «r» );
if ( $handle ) while (! feof ( $handle )) $buffer = fgetss ( $handle , 4096 );
echo $buffer ;
>
fclose ( $handle );
>
?>

Результатом выполнения данного примера будет что-то подобное:

Добро пожаловать! Сегодня . Текст вне HTML-блока.

Примечания

Замечание: Если у вас возникают проблемы с распознаванием PHP концов строк при чтении или создании файлов на Macintosh-совместимом компьютере, включение опции auto_detect_line_endings может помочь решить проблему.

Смотрите также

  • fgets() — Читает строку из файла
  • fopen() — Открывает файл или URL
  • popen() — Открывает файловый указатель процесса
  • fsockopen() — Открывает соединение с интернет-сокетом или доменным сокетом Unix
  • strip_tags() — Удаляет теги HTML и PHP из строки
  • SplFileObject::fgetss() — Получить строку из файла и удалить теги HTML
  • Фильтр string.strip_tags

User Contributed Notes

Источник

fgets

Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen() (и все еще не закрытым функцией fclose() ).

Чтение заканчивается по достижении length — 1 байт, если встретилась новая строка (которая включается в возвращаемый результат) или конец файла (что встретилось первым). Если длина не указана, чтение из потока будет продолжаться до тех пор, пока не достигнет конца строки.

Замечание:

До версии PHP 4.3.0, опущение этого параметра означало, что длина строки будет равна 1024 символам. Если большинство строк в файле больше 8 килобайт, в целях производительности вашего скрипта стоит указать максимальную длину строки.

Возвращаемые значения

Возвращает строку размером в length — 1 байт, прочитанную из дескриптора файла, на который указывает параметр handle . Если данных для чтения больше нет, то возвращает FALSE .

В случае возникновения ошибки возвращает FALSE .

Список изменений

Версия Описание
4.3.0 fgets() теперь безопасна для обработки бинарных данных

Примеры

Пример #1 Построчное чтение файла

$handle = @ fopen ( «/tmp/inputfile.txt» , «r» );
if ( $handle ) while (( $buffer = fgets ( $handle , 4096 )) !== false ) echo $buffer ;
>
if (! feof ( $handle )) echo «Error: unexpected fgets() fail\n» ;
>
fclose ( $handle );
>
?>

Примечания

Замечание: Если у вас возникают проблемы с распознаванием PHP концов строк при чтении или создании файлов на Macintosh-совместимом компьютере, включение опции auto_detect_line_endings может помочь решить проблему.

Замечание:

Программисты, привыкшие к семантике ‘C’ функции fgets() , должны принимать во внимание разницу в том, каким образом возвращается признак достижения конца файла (EOF).

Смотрите также

  • fgetss() — Прочитать строку из файла и отбросить HTML-теги
  • fread() — Бинарно-безопасное чтение файла
  • fgetc() — Считывает символ из файла
  • stream_get_line() — Получает строку из потокового ресурса до указанного разделителя
  • fopen() — Открывает файл или URL
  • popen() — Открывает файловый указатель процесса
  • fsockopen() — Открывает соединение с интернет сокетом или доменным сокетом Unix
  • stream_set_timeout() — Устанавливает значение тайм-аута на потоке

Источник

Читайте также:  Открыть несколько файлов with python
Оцените статью