Содержание
- 0.1 Описание
- 0.2 Список параметров
- 0.3 Возвращаемые значения
- 0.4 Список изменений
- 0.5 Примеры
- 0.6 Примечания
- 0.7 Смотрите также
- 1 Описание string fgets ( resource handle [, int length] )
- 2 Давайте перечислим все возможности
- 3 Традиционные методы fopen
- 4 Нелинейная обработка файла: перемещение по файлу
- 5 Захват целого файла
- 6 Хороший стиль программирования
- 7 Выбор за вами
(PHP 4, PHP 5, PHP 7)
fgets — Читает строку из файла
Описание
Читает строку из файлового указателя.
Список параметров
Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen() (и все еще не закрытым функцией fclose() ).
Чтение заканчивается по достижении length — 1 байт, если встретилась новая строка (которая включается в возвращаемый результат) или конец файла (что встретилось первым). Если длина не указана, чтение из потока будет продолжаться до тех пор, пока не достигнет конца строки.
До версии PHP 4.3.0, опущение этого параметра означало, что длина строки будет равна 1024 символам. Если большинство строк в файле больше 8 килобайт, в целях производительности вашего скрипта стоит указать максимальную длину строки.
Возвращаемые значения
Возвращает строку размером в length — 1 байт, прочитанную из дескриптора файла, на который указывает параметр handle . Если данных для чтения больше нет, то возвращает FALSE .
В случае возникновения ошибки возвращает FALSE .
Список изменений
Версия | Описание |
---|---|
4.3.0 | fgets() теперь безопасна для обработки бинарных данных |
Примеры
Пример #1 Построчное чтение файла
Примечания
Замечание: Если у вас возникают проблемы с распознаванием PHP концов строк при чтении или создании файлов на Macintosh-совместимом компьютере, включение опции auto_detect_line_endings может помочь решить проблему.
Программисты, привыкшие к семантике ‘C’ функции fgets() , должны принимать во внимание разницу в том, каким образом возвращается признак достижения конца файла (EOF).
Смотрите также
- fgetss() — Прочитать строку из файла и отбросить HTML-теги
- fread() — Бинарно-безопасное чтение файла
- fgetc() — Считывает символ из файла
- stream_get_line() — Получает строку из потокового ресурса до указанного разделителя
- fopen() — Открывает файл или URL
- popen() — Открывает файловый указатель процесса
- fsockopen() — Открывает соединение с интернет сокетом или доменным сокетом Unix
- stream_set_timeout() — Устанавливает значение тайм-аута на потоке
(PHP 3, PHP 4, PHP 5)
fgets — Читает строку из файла
Описание string fgets ( resource handle [, int length] )
Возвращает строку размером в length — 1 байт, прочитанную из дескриптора файла, на который указывает параметр handle . Чтение заканчивается, когда количество прочитанных байтов достигает length — 1, по достижении конца строки (который включается в возвращаемое значение) или по достижении конца файла (что бы ни встретилось первым). Если длина не указана, по умолчанию ее значение равно 1 килобайту или 1024 байтам.
В случае возникновения ошибки функция возвращает FALSE .
Наиболее распространенные ошибки:
Программисты, привыкшие к семантике ‘C’ функции fgets() , должны принимать во внимание разницу в том, каким образом возвращается признак достижения конца файла ( EOF ).
Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen() .
Ниже приведен простой пример:
Пример 1. Построчное чтение файла
= fopen ( "/tmp/inputfile.txt" , "r" ); while (! feof ( $handle )) < $buffer = fgets ( $handle , 4096 ); echo $buffer ; > fclose ( $handle ); ?> |
Замечание: Параметр length стал необязательным, начиная с PHP версии 4.2.0. Если этот параметр опущен, длина строки принимается за 1024. С версии PHP 4.3, отсутствие параметра length будет приводить к чтению потока до конца строки. Если длина большинства строк в файле превышает 8 килобайт, наиболее эффективным решением в отношении ресурсов, используемых скриптом, будет указание максимальной длины строки.
Замечание: Данная функция может корректно обрабатывать двоичные данные, начиная с версии PHP 4.3. Более ранние версии не обладали этой функциональностью.
Замечание: Если у вас возникают проблемы с распознаванием PHP окончания строк при чтении файлов на Macintosh-совместимом компьютере или при чтении файлов, созданных на Macintosh-совместимом компьютере, необходимо включить опцию auto_detect_line_endings .
Об использовании функций fopen, fclose, feof, fgets, fgetss, и fscanf
Давайте перечислим все возможности
Одним из преимуществ работы с современными языками программирования, такими как PHP, является количество доступных возможностей. PHP легко мог бы присвоить девиз языка Perl, "Существует несколько способов сделать что-либо", особенно, когда речь идет об обработке файлов. Но при изобилии доступных средств, возникает вопрос, какое из них лучше для выполнения работы. Конечно, в действительности, ответ на этот вопрос зависит от того, какие цели вы ставите при обработке файла, поэтому изучение всех возможностей языка стоит потраченного времени.
Традиционные методы fopen
Методы fopen , возможно, лучше других знакомы программистам C и C++ былых времен, поскольку в большей или меньшей степени являются именно теми инструментами, которые на протяжении долгих лет были всегда у вас под рукой, если вы работали с этими языками программирования. Для любого из этих методов вы выполняете стандартную процедуру, используя fopen для открытия файла, функцию для чтения данных, а затем fclose для закрытия файла, как показано в Листинге 1.
Листинг 1. Открытие и чтение файла с помощью fgets
Хотя эти функции знакомы большинству опытных программистов, позвольте мне проанализировать их работу. В действительности вы выполняете следующие шаги:
- Открываете файл. $file_handle хранит ссылку на сам файл.
- Проверяете, не достигли ли вы конца файла.
- Продолжаете считывание файла, пока не достигнете конца, печатая каждую строку, которую читаете.
- Закрываете файл.
Помня об этом, я рассмотрю каждую использованную здесь функцию для работы с файлами.
Функция fopen
Функция fopen устанавливает связь с файлом. Я говорю "устанавливает связь, " поскольку, кроме открытия файла, fopen может открыть и URL:
Это строка программы создает связь с вышеуказанной страницей и позволяет вам начать ее чтение как локального файла.
Примечание: Параметр "r" , использованный в fopen , указывает на то, что файл открыт только для чтения. Поскольку запись в файл не входит в круг вопросов, рассматриваемых в данной статье, я не стану перечислять все возможные значения параметра. Тем не менее, вам необходимо изменить "r" на "rb" если вы производите чтение из двоичных файлов для межплатформенной совместимости. Ниже будет приведен пример данного типа.
Функция feof
Команда feof определяет, произведено ли чтение до конца файла, и возвращает значение True (Истина) или False (Ложь). Цикл, приведенный в Листинге 1 продолжается, пока не будет достигнут конец файла "myfile." Обратите внимание, что feof также возвращает False, если вы читаете URL и произошло превышение времени ожидания подключения, поскольку не имеется более данных для считывания.
Функция fclose
Пропустим середину Листинга 1 и перейдем в конец; fclose выполняет задачу, противоположную fopen : она закрывает подключение к файлу или URL. После выполнения данной функции вы больше не сможете выполнять чтение из файла или сокета.
Функция fgets
Возвращаясь на несколько строк назад в Листинге 1, вы попадаете в самый центр процесса обработки файлов: непосредственно чтение файла. Функция fgets — это выбранное вами "оружие" для первого примера. Она захватывает строчку данных из файла и возвращает ее как строку. Оттуда вы можете выводить данные или обрабатывать их иным образом. В примере, приведенном в Листинге 1, распечатывается весь файл целиком.
Если вы решите ограничить размер порции данных, с которой работаете, можно добавить fgets аргумент для ограничения максимальной длины строки захватываемых данных. Например, используйте следующий программный код для ограничения длины строки в 80 символов:
Вспомните "