Чтение файла до конца php

PHP | Открытие, чтение, закрытие файлов

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

Функция PHP fopen()

Функция fopen() в PHP — это встроенная функция, которая используется для открытия файла или URL-адреса. В случае сбоя, она возвращает FALSE и выдаёт ошибку. Если вам нужно скрыть вывод ошибки добавьте символ ‘@’ перед именем функции.

Синтаксис

Параметры

  • filename : Обязательный параметр, определяющий файл.
  • mode : Обязательный параметр, определяющий тип доступа к файлу или потоку.
    Он может иметь следующие возможные значения:
    • «r»: Открывает файл только для чтения; помещает указатель в начало файла.
    • «r+»: Окрывает файл для чтения и записи; помещяет указатель в начало файла.
    • «w»: Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует — пробует его создать.
    • «w+»: Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует — пробует его создать.
    • «a»: Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
    • «a+»: Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
    • «x»: Создаёт и открывает только для записи. Он создает новый файл и возвращает FALSE и ошибку, если файл уже существует.
    • «x+»: Создаёт и открывает для чтения и записи. Создает новый файл и возвращает FALSE и ошибку, если файл уже существует.
    • «c»: Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличие от ‘w’), и вызов к этой функции не вызывает ошибку (также как и в случае с ‘x’).
    • «c+»: Открывает файл для чтения и записи; в остальном имеет то же поведение, что и ‘c’.
    • «e»: Установить флаг close-on-exec (закрыть при запуске) на открытый файловый дескриптор. Доступно только в PHP скомпилированном на системах поддерживающих POSIX.1-2008.

    В этом уроке мы будем использовать текстовый файл mane.txt:

    AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language

    В следующем примере, ипользуя функцию fopen() , откроем файл «mane.txt» в режиме чтения:

    Пример

     echo fread($myfile,filesize("mane.txt")); 
    fclose($myfile);
    ?>

    Конструкция or die(«Невозможно открыть файл!») позволяет прекратить работу скрипта и вывесте некоторое сообщение об ошибке, если функция fopen не смогла открыть файл.

    Чтение файла — fread()

    Функция fread() считывает информацию из открытого файла.

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

    Следующий код PHP читает файл «mane.txt» до конца:

    Закрытие файла — fclose()

    Функция fclose() используется, чтобы закрыть открытый файл.

    Синтаксис

    bool fclose ( resource handle )

    Функция закрывает файл, на который указывает handle.

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

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

    Примечание: Хорошая практика программирования — закрывать все файлы после того, как вы закончили с ними работать. Дело в том, что открытый файл на вашем сервере продолжает занимать ресурсы!

    Однострочное чтение — fgets()

    Функция fgets() используется для чтения одной строки из файла.

    В приведенном ниже примере выводится первая строка файла mane.txt:

    Пример

     echo fgets($myfile); 
    fclose($myfile);
    ?>

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

    Проверка окончания файла — feof()

    Функция feof() определяет, достигнут ли конец файла. Если в указанном дескрипторе, определяется окончание файла, возвращает True . В противном случае, False .

    Функция feof() полезна для цикла работающего с данным неизвестной длины.

    В приведенном ниже примере файл «mane.txt» считывается построчно, пока не будет достигнут конец файла:

    Пример

     while(!feof($myfile)) < // цикл завершится, при обнаружении конца файла
    echo fgets($myfile) . "
    "; // Вывести одну строку
    >
    ?>

    Чтение одного символа — fgetc()

    Функция fgetc() используется для чтения одного символа из файла.

    В приведенном ниже примере файл «mane.txt» считывается посимвольно, пока не будет достигнут конец файла:

    Пример

     while(!feof($myfile)) < // цикл завершится, при обнаружении конца файла
    echo fgetc($myfile) . "
    "; // Вывести один символ
    >
    ?>

    Примечание: Не перепутайте имя функции fgets() оканчивается символом s — string, а имя функции fgetc() оканчивается символом c — character.

    Источник

    Запись и чтение файлов в 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 ».

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

    Источник

    Читайте также:  Python stdin read all about it
Оцените статью