Как прочитать файл php
Перейти к содержимому

Как прочитать файл php

  • автор:

Как прочитать файл в php массив

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

 $content = file_get_contents('./example.txt'); $lines = explode("\n", $content); print_r($lines); # => Array # => ( # . Здесь вывод данных. Каждая строчка - элемент массива # => ) 

Вариант с функцией file(). Файл будет прочитан построчно, строки файла будут сохранены в массив

 $lines = file('./example.txt', FILE_IGNORE_NEW_LINES); print_r($lines); # => Array # => ( # . Здесь вывод данных. Каждая строчка - элемент массива # => ) 

Работа с файловой системой

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

Чтение и запись файлов

Открытие и закрытие файлов

Для открытия файлов в PHP определена функция fopen() . Она имеет следующее определение: resource fopen(string $filename, string $mode) . Первый параметр $filename представляет путь к файлу, а второй — режим открытия. В зависимости от цели открытия и типа файла данный параметр может принимать следующие значения:

  • ‘r’ : файл открывается только для чтения. Если файла не существует, возвращает false
  • ‘r+’ : файл открывается только для чтения с возможностью записи. Если файла не существует, возвращает false
  • ‘w’ : файл открывается для записи. Если такой файл уже существует, то он перезаписывается, если нет — то он создается
  • ‘w+’ : файл открывается для записи с возможностью чтения. Если такой файл уже существует, то он перезаписывается, если нет — то он создается
  • ‘a’ : файл открывается для записи. Если такой файл уже существует, то данные записываются в конец файла, а старые данные остаются. Если файл не существует, то он создается
  • ‘a+’ : файл открывается для чтения и записи. Если файл уже существует, то данные дозаписываются в конец файла. Если файла нет, то он создается

Результатом функции fopen будет дескриптор файла. Этот дескриптор используется для операций с файлом и для его закрытия.

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

$fd = fopen("form.php", 'r') or die("не удалось открыть файл"); fclose($fd);

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

Чтение файла

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

 fclose($fd); ?>

При каждом вызове fgets() PHP будет помещать указатель в конец считанной строки. Чтобы проследить окончание файла, используется функция feof() , которая возвращает true при завершении файла. И пока не будет достигнут конец файла, мы можем применять функцию fgets().

Чтение файла полностью

Если нам надо прочитать файл полностью, то мы можем облегчить себе жизнь, применив функцию file_get_contents() :

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

Поблочное считывание

Также можно провести поблочное считывание, то есть считывать определенное количество байт из файла с помощью функции fread() :

 fclose($fd); ?>

Функция fread() принимает два параметра: дескриптор считываемого файла и количество считываемых байтов. При считывании блока указатель в файле становится в конец этого блока. И также с помощью функции feof() можно отследить завершение файла.

Запись файла

Для записи файла применяется функция fwrite() , которая записывает в файл строку:

Аналогично работает другая функция fputs() :

Работа с указателем файла

При открытии файла для чтения или записи в режиме ‘w’, указатель в файле помещается в начало. При считывании данных PHP перемещает указатель в файле в конец блока считанных данных. Однако мы также вручную можем управлять указателем в файле и устанавливать его в произвольное место. Для этого надо использовать функцию fseek, которая имеет следующее формальное определение:

int fseek (resource $handle , int $offset [, int $whence = SEEK_SET ] )

Параметр $handle представляет дескриптор файла. Параметр $offset — смещение в байтах относительно начала файла, с которого начнется считывание/запись. Третий необязательный параметр задает способ установки смещения. Он может принимать три значения:

  • SEEK_SET : значение по умолчанию, устанавливает смещение в offset байт относительно начала файла
  • SEEK_CUR : устанавливает смещение в offset байт относительно начала текущей позиции в файле
  • SEEK_END : устанавливает смещение в offset байт от конца файла

В случае удачной установки указателя функция fseek() возвращает 0, а при неудачной установке возвращает -1.

Пример использования функции:

$fd = fopen("hello.txt", 'w+') or die("не удалось открыть файл"); $str = "Привет мир!"; // строка для записи fwrite($fd, $str); // запишем строку в начало fseek($fd, 0); // поместим указатель файла в начало fwrite($fd, "Хрю"); // запишем в начало строку fseek($fd, 0, SEEK_END); // поместим указатель в конец fwrite($fd, $str); // запишем в конце еще одну строку fclose($fd);

Учимся работать с файлами в PHP

В данном уроке мы рассмотрим несколько способов работы с файлами в PHP, а также поговорим о преимуществах и недостатках каждого из них.

Построчное чтение из файла

Для начала давайте научимся читать файлы. Давайте создадим текстовый файл file.txt и запишем в него следующий текст:

В век высоких технологий Без программ не обойтись, Программисты ежедневно Легче делают нам жизнь! 

Давайте теперь считаем его с помощью программы на языке php. Создайте файл files.php и запишите в него следующий код:

'; > fclose($file);

Если вы сейчас запустите этот скрипт, то увидите на экране четверостишие из файла.

  • Курс HTML для начинающих
  • Курс PHP для начинающих
  • Курс MySQL для начинающих
  • Курс ООП в PHP

Построчное чтение файла на PHP

Давайте теперь разберём по шагам нашу программу.

  1. Функция fopen открывает файл. Первым аргументом указывается путь до файла, вторым аргументом указывается режим для работы с файлом. В нашем случае это ‘r’ – чтение (от read). Ознакомьтесь с другими режимами работы в документации по функции. Данная функция возвращает ресурс — это еще один тип данных, с которым мы ранее не работали. Ресурс в PHP – это ссылка на какой-то внешний ресурс (файл, база данных и т. п.). Работа с ресурсами происходит с помощью специальных функций. Более детально о ресурсах вы можете прочитать тут.
  2. В цикле for четыре раза вызывается функция fgets. Эта функция считывает строку из файла и перемещает текущий курсор на следующую строку (курсор можете представить себе как обычный курсор в текстовом редакторе, который просто перемещается в момент считывания данных из файла). Если снова вызвать эту функцию, она сделает то же самое для следующей строки. Возвращает эта функция считанную строку (string).
  3. Ресурс закрывается с помощью функции fclose. Делать это следует всегда, несмотря на то, что PHP по завершении работы программы сделает это сам. Дело в том, что если открыть файл в блокирующем режиме (например, для записи, в режиме ‘w’), то он будет недоступен для других процессов, они будут ждать, пока предыдущий ресурс освободит этот файл.

Как вы понимаете, для чтения не очень удобно использовать цикл for с указанием конкретного числа строк, которые необходимо считать. Для этого можно использовать функцию feof – она возвращает true, если достигнут конец файла, и false – если нет.

  • Привет, мир!
  • Развернуть строку
  • Чётные числа
  • Числа Фибоначчи

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

'; > fclose($file);

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

Построчная запись в файл

Теперь запишем данные в файл. Для того чтобы открыть файл для записи используется та же функция fopen, только в качестве режима работы указывается ‘w’ (от write).

А для записи в файл строки используется функция fputs(). Первым аргументом указывается ресурс, а вторым — строка, которую необходимо записать в файл. Давайте в качестве примера напишем программу, которая запишет в файл file2.txt числа от 1 до 100.

 fclose($file);

Константа PHP_EOL содержит в себе символ переноса строки. При этом для разных операционных систем (Windows или Unix-подобных) эти символы будут разными.

Дозаписываем в конец файла

При этом если сейчас запустить программу снова, то старые данные в файле file2.txt перезапишутся новыми. Для того, чтобы сохранить содержимое файла и дозаписать данные в конец, нужно использовать режим работы с файлом “a” (от append – присоединять, добавлять).

Если мы запустим этот скипт дважды, то в файле file3.txt будет две строки “abc”.

Читаем файл целиком

В PHP также имеется возможность прочитать весь файл за раз. Для этого используется функция file_get_contents().

Данный код выведет всё то же четверостишие, только без переноса строк.

Чтение файла целиком на PHP

Так произошло потому, что в самом первом примере мы добавляли тег
после каждой прочитанной строки. Если же мы откроем исходный код страницы, то увидим, что на самом деле переносы строк в исходном коде сохранены.

Исходник прочитанного файла

Запись в файл данных целиком

Для того, чтобы записать в файл большой объем данных за раз — сразу несколько строк, можно воспользоваться функцией file_put_contents.

Если снова запустить этот код, файл перезапишется. Для того, чтобы дополнить файл у этой функции есть третий аргумент — режим работы с файлом. Для дозаписи в конец файла следует использовать константу FILE_APPEND.

Какой способ выбрать

Данные способы отличаются в первую очередь тем, что когда мы считываем файл целиком, или записываем в него много данных за раз, нам приходится хранить в оперативной памяти больше данных, чем если бы мы работали по отдельности с каждой строкой. Если данных не слишком много, об этом можно не беспокоиться. Однако, если вы читаете файл размером 10 Гб, а на компьютере, на котором выполняется скрипт, всего 4Гб оперативной памяти, то его получится считать только построчно. При попытке загрузить его целиком программа упадёт с ошибкой о нехватке памяти.

Прочитать файл и вывести его содержимое с помощью PHP

В этой заметке я покажу, как средствами PHP можно открыть файл, прочитать его содержимое и вывести эти данные на экран. Будем использовать функции PHP для работы с файлами .

// Функция, которая открывает файл, читает его и возвращает function loadDataFromFile($file) < if (!file_exists($file)) throw new Exception("Ошибка: файл $file не существует!"); if (!filesize($file)) throw new Exception("Файл $file пустой!"); // Открываем поток и получаем его дескриптор $f = fopen($file, "r"); // В переменную $content запишем то, что прочитали из файла $content = fread($f, filesize ($file)); // Заменяем переносы строки в файле на тег BR. Заменить можно что угодно //$content = str_replace("\r\n","
", $content); // Закрываем поток fclose ($f); // Возвращаем содержимое return $content; > // Файл, с которым работаем $file = __DIR__.'/files/file.txt'; // Выводим информацию из файла try < echo loadDataFromFile($file); >catch (Exception $e) < echo $e->getMessage(); >

В данном примере я использовал блок try — cach для «отлова» исключений при попытке вывода информации из файла.

Есть ещё способы, с помощью которых можно открыть файл и как-то в дальнейшем с ним работать:

// Способ #2 (Получение файла в виде строки) $content = file_get_contents($file); echo $content; // Способ #3 (Сразу выводит указанный файл) readfile($file); // Способ #4 (Читает содержимое файла и помещает его в массив) file($file) // Выводим echo $file_name[0];

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *