Содержание
- 0.1 Описание
- 0.2 Список параметров
- 0.3 Возвращаемые значения
- 0.4 Список изменений
- 0.5 Примеры
- 0.6 Примечания
- 0.7 Смотрите также
- 1 12 ответов
- 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. Вот текстовый файл:
Как я могу получить содержимое второй строки с помощью php? Это возвращает первую строку:
..но мне нужна вторая.
любая помощь была бы очень признательна
12 ответов
omg мне не хватает 7 представителей, чтобы сделать комментарии. Это комментарий @Raptor & @Tomm, так как этот вопрос по-прежнему отображается высоко в Google serps.
Он совершенно прав. Для небольших файлов file($file); это прекрасно. Для больших файлов это полный перебор B/C PHP массивы едят память, как сумасшедший.
Я только что провел крошечный тест с *.csv с размером файла
67 Мб (1,000,000 строк):
и поскольку никто не упомянул об этом, я дал SplFileObject попытка, которую я только недавно открыл для себя.
Это было на моем рабочем столе Win7, поэтому он не является репрезентативным для производственной среды, но все же . большая разница.
Если вы хотите сделать это таким образом.
альтернативно, откройте его с file() и подпишите строку с [1] .
Об использовании функций 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 символов:
Вспомните "