понедельник, 9 июля 2012 г.

Чтение одной строки в файле

Сегодня я расскажу, какс помощью php получить строку в определенном файле.
Это можно сделать несколькими способами:
1) Более быстрый для написания, но более ресурсоемкий.
2) Более сложный , но этот способ сможет открывать файлы вплоть до 100 мегабайт (больше не пытался), или до того размера, которым только может быть файл.

Первый способ

Берём весь файл с помощью функции file:
<?php
$file=file('text.txt');
$var=$file[3];
?>
Этот код получит 4 строку (посколько в массивах нумерация идет с ноля).

Второй способ

Можно читать файл, открыв его с помощью fopen, а затем через fgets($fp, 1024) получать файл постепенно, указав во втором параметре желаемый размер строки.
Логика тут такова: если строка больше 1024 байта - при чтении будет взято только первые 1024 байта, следующие символы получим только при следующем вызове fgets. Также функция остановится при конце строки, что тоже довольно полезно. Узнать, что наступил конец строки, а не длина 1024 байта просто - стоит лишь посмотреть наличие \n или \r\n в конце строки.
Функция fseek() позволит вам перейти, например, к 500 байту файла: fseek($fp, 500), и уже начиная с него записать необходимую информацию.
Зачем это нужно? При использовании file весь файл загружается в оперативную память, и если файл весит мегабайт 10, то могут быть нехорошие последствия - элементарно не хватит памяти для исполнения скрипта.
Если же перейти на определенный участок файла с помощью fseek, а затем через fgets взять участок файла - то в память будет загружена только эта часть. Это создаёт дополнительные сложности в том, что необходимо найти необходимую строку, тем не менее, работа с fseek (при большом буфере) намного быстрее, чем работа с функцией file.

Позже я расскажу о функциях чтения и записи файловой системы больше, так как это часто камень преткновения многих начинающих, которые не понимают, как работают эти функции.

Комментариев нет:

Отправить комментарий