Работа с файлами на php: открытие, запись, чтение. Как правильно читать файлы с помощью PHP Запись и чтение файла php

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

Последовательность работы с файлами в PHP такая:

  1. Открыть файл.
  2. Выполнить необходимые действия.
  3. Закрыть файл.

Как видите, последовательность работы с файлами напоминает работу с файлами через обычный проводник. Только здесь вся работа выполняется автоматически самим PHP-скриптом .

Начнём с первого пункта - открытие файла. Файл открывается с помощью функции fopen() . Первый параметр - это путь к файлу, а второй параметр - модификатор . Давайте сразу разберём возможные модификаторы:

  1. a - открывает файл только для записи, причём указатель помещается в конец файла.
  2. a+ a , но также файл открывается ещё и для чтения.
  3. r - открывает файл только для чтения, а указатель устанавливается в начало файла.
  4. r+ - то же самое, что и модификатор r , но также файл открывается ещё и для записи.
  5. w - открывает файл только для записи, указатель устанавливает в начало файла и стирает всё содержимое файла.
  6. w+ - то же самое, что и модификатор w , только файл открывается также и для чтения.

Также различают два режима работы с файлами: бинарный (обозначается b ) и текстовый (обозначается t ). Если Вы работаете с обычным текстовым файлом, то выбирайте текстовый режим, а если, например, с изображением, то бинарный.

Это все основные модификаторы, которых Вам вполне хватит. Теперь давайте узнаем, как закрыть файл. Закрывается файл с помощью функции fclose() .

Теперь перейдём к чтению файла с помощью функции fread() . И давайте, наконец-то, приведу пример:

$contents = "";
while (!feof($handle))
$contents .= fread($handle, 4096);
fclose($handle);
?>

В данном примере мы сначала открываем файл для чтения в текстовом режиме (модификатор rt ). Функция fopen() возвращает так называемый дескриптор , с помощью которого можно общаться с файлом, и записываем его в переменную handle . Затем мы в цикле while() до тех пор, пока не достигнут конец файл, считываем содержимое каждый раз по 4096 символов, которые записываем в переменную contents . После завершения процесса считывания - закрываем файл, вновь с помощью дескриптора файла.

Теперь перейдём к записи с помощью функции fwrite() :

$handle = fopen("files/a.txt", "at");
$string = "This is text";
fwrite($handle, $string);
fclose($handle);
?>

После запуска этого скрипта, в файле a.txt добавится строка "This is text ".

Особо внимательные читатели обратили внимание на указатели, о которых я писал чуть выше. Указатель - это текущая позиция воображаемого "курсора" в файле. Именно с него и начинается работа с файлом. Изменить положение указателя можно с помощью функции fseek() :

$handle = fopen("files/a.txt", "rt");
echo $contents."
";
fseek($handle, 0, SEEK_SET);
$contents = fread($handle, 3);
echo $contents."
";
?>

Таким образом, мы сначала считываем 3 символа (в результате, текущее положение указателя сдвигается на 3 позиции). Затем мы устанавливаем указатель на начало файла. И вновь считываем 3 символа. Как Вы и догадались, мы два раза считали одно и тоже. То есть первый раз 3 символа, потом вернулись назад, и вновь считали 3 символа. Также если у функции fseek() заменить SEEK_SET на SEEK_CUR , то тогда второй параметр будет не устанавливать позицию указателя, а сдвигать относительно текущего местоположения. Советую даже попрактиковаться с указателями, потому что для понимания это не так просто. Также рекомендую попытаться записать что-нибудь в файл при позиции указателя, например, в самом начале файла. И обязательно объясните полученный результат.

И, напоследок, хочется привести ещё пару функций, которые позволяют работать с файлами на самом простом уровне: file_put_contens() и file_get_contents() . Функция file_put_contents() записывает в файл, а функция file_get_contents() считывает содержимое из файла. Эти функции очень просты в применении, но возможностей там уже меньше (хотя, как правило, они и не нужны):

file_put_contents("files/a.txt", "This is text 2");
echo file_get_contents("files/a.txt");
?>

В данном скрипте мы сначала записали строку "This is text 2 " в файл, а потом считываем полученное содержимое и выводим его. Как видите, трудно придумать более простой способ чтения из файла и запись в файл .

Вот и все основные моменты работы с файлами в PHP .

Базы данных MySQL и Access все чаще становятся общедоступными средствами хранения данных. Но в начале 1990-х была популярна работа с файлами в PHP, сохранение записей в форматированных текстовых файлах в формате CSV, разделенных новыми строками.

Основные принципы работы

Базы данных удобны, но каждый разработчик должен по крайней мере иметь некоторые базовые знания о том, как читать и писать файлы. Возможно, многие задумаются над вопросом: «Почему мне нужно это знать? Если я использую файлы, они написаны в XML, и я просто применяю синтаксический анализатор».

Итак, вот несколько причин, по которым могут понадобиться файлы:

  1. Чтобы переместить двоичные данные (например, файлы изображений) в базу данных BLOB (двоичные большие объекты).
  2. Импорт данных (например, адресов электронной почты), экспортированных из устаревшей базы данных или приложения.
  3. Чтобы из базы данных экспортировать информацию в текстовый файл для обработки в автономном режиме.

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

Удобно использовать и встроенные функции, которые автоматически совершают открытие и закрытии. Они доступны в PHP5.Также следует ознакомиться с атрибутами файлов, то есть с его свойствами.

Они могут рассказать:

  • о размере;
  • выдать информацию о том, когда последний раз к нему обращались;
  • рассказать о владельце и т. д.

Лучше всего выучить все основные атрибуты для работы с файлами в PHP. Это во многом облегчит работу.

История файлов

Может понадобится узнать время последнего редактирования файла. В этом случае на помощь приходят функции: fileatime(), filemtime() и filectime().

"; echo $file . " имел последнее изменение i-узла " . date($formatDate, $timeM) . ".
"; echo $file . " был изменен " . date($formatDate, $timeC) . ".";

Здесь код извлекает временную метку последнего доступа и отображает ее:

  • C: Windowsfile.ini был просмотрен 19 сен 2018 4:34 вечера.
  • C: Windowsfile.ini был изменен Пт 8 окт 2018 2:03 утра.
  • C: Windowsfil.ini был изменен в Вт 16 дек 2017 4:34.

Функция filectime() показывает время изменения разной информации, связанной с файлом (например, права доступа), а filemtime() - изменения самого файла.

Функция date() использовалась для форматирования временной метки Unix, возвращаемой file*time() функциями.

Файл или нет?

Чтобы узнать, действительно ли происходит работа с файлами в PHP, можно использовать is_file() функцию или is_dir(), проверяющие, каталог ли это.

"; echo $file . (is_dir($file) ? " " : " не") . " каталог.";

Вывод кода примера:

  • C: Windowsfile.ini файл.
  • C: Windowsfile.ini не каталог.

Таким образом можно избежать ошибок и не открыть по неосторожности «не файл». В PHP работа с файлами и каталогами аналогична.

Разрешения для файлов

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

"; echo $file . (is_writable($file) ? " " : " не") . " записывается.";

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

Код выведет следующие значения на экран:

  • C: Windowsfile.ini читается.
  • C: Windowsfile.ini не записывается.

Используя тернарный оператор, можно указать, доступен файл или нет.

Размер файла

Чтобы узнать размер файла, нужно использовать функцию filesize(). Он будет показан в байтах.

Функция выведет на экран следующее:

  • C: Windowsfile.ini имеет размер 510 байт.

Использование файла в системе Windows здесь подчеркивает один нюанс. Обратная косая черта имеет особое значение в качестве символа escape. Нужно будет избегать этого, добавив еще одну обратную косую черту.

Если файл еще не создан, функция filesize() укажет на False и ошибку. Поэтому вначале проверяют файл на существование нужной команды file_exists().

Проверку file_exists() нужно включать практически всегда для безопасности.

Чтение файлов

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

Функции для работы с файлами PHP облегчают задачу. В данном случае понадобится file_get_contents(). Она будет считывать все содержимое файла в переменную без необходимости открывать или закрывать файл самостоятельно. Это удобно, когда объем записи относительно невелик, так как сразу считывать 1 ГБ данных в архив не всегда рационально в PHP. Работа с «.ini»-файлами и функцией file_get_contents() показана ниже.

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

Для работы с функцией fopen() необходимы два аргумента:

  • файл, который нужно открыть;
  • режим, используемый в этом случае является «r» для чтения.

Функция возвращает дескриптор или поток в файл, который хранится в переменной $file1. Ее нужно использовать во всех последующих командах при работе с файлом.

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

";} while (!feof($file1)); fclose($file1);

Использование do-while-цикла является хорошим выбором, чтобы узнать заранее, сколько строк в файле. Функция feof() проверяет, достиг ли файл завершения, а цикл продолжается до тех пор, пока не будет достигнут конец условия файла. После окончания чтения используется функция fclose() для закрытия документа.

Запись файлов

Два часто используемых режима при записи в файл с использованием функции fwrite(): «w» и «a». «W» означает, что нужно записать в документ, но он предварительно удалит любое содержимое, «a» - добавление новых данные к тому, что уже существует в файле. Нужно быть уверенным, что используется правильный вариант.

В следующем примере будет использоваться режим «a» для записи.

Сначала имя файла назначается переменной, затем он открывается в режиме «a» для добавления. Данные, которые должны быть записаны, назначаются переменной $output и fwrite(), а информация добавляется в файл. Процесс повторяется, чтобы добавить еще одну строку, затем документ закрывается с использованием fclose().

Предварительно определенная константа PHP_EOL добавляет символ новой строки, специфичный для платформы, на которой работает PHP с текстовыми файлами.

Содержимое файла после выполнения вышеуказанного кода должно выглядеть следующим образом:

  • банан;
  • Китай.

Функция file_put_contents() также может записывать в файл. Она принимает имя файла, данные, которые должны быть записаны и константу FILE_APPEND, если она должна добавить данные (будет перезаписывать содержимое файла по умолчанию).

Вот такой же пример, как и выше, но на этот раз используется file_put_contents().

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

Последнее обновление: 1.11.2015

Как и большинство языков программирования, 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() , которая получает дескриптор файла и возвращает одну считанную строку. Пройдем построчно по всему файлу:

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

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

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

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

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

Функция 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. Для начала, для чего нужны файлы? Ведь можно все хранить в базе данных MySQL или PostgreSQL или любой другой. Но иногда бывают такие задачи, когда использование БД, со всеми обработками и заботой о безопасности соединения, не целесообразно. Например нужно сделать обычный счетчик, а до этого в проекте у нас БД не использовалась. Так что нам, ради одного малюсенького счетчика заводить базу данных и хранить в ней всего пару строк? тут гораздо проще воспользоваться файлами. К тому же, иногда на хостинге вообще нет поддержки баз данных, тогда файлы вообще остаются единственным выходом.

Ну, допустим я вас убедил, что файлы необходимы:) Теперь давайте разбираться, как же с ними работать. Как создавать, открывать, записывать, перезаписывать, читать и так далее. Обо всем по порядку.

Создаем файл

В PHP для открытия файлов используется функция fopen. Тем не менее, она также может и создавать файлы. Если передать fopen имя файла, которого не существует, то она создаст его.

Сама функция fopen принимает два параметра, оба они обязательны. Во-первых, мы должны указать имя файла, который хотим открыть. Во-вторых, передать параметр, который объясняет функции, что мы планируем делать с этим файлом (например, чтение из файла, запись и так далее).

Если нужно создать файл, то указываем его имя и передаем параметр, что мы хотим записать в него данные. Обратите внимание: Мы должны обязательно сказать PHP, что мы пишем в файл, в противном случае она не будет создавать новый файл.

Пример:

$ourFileName = "testFile.txt";

$ourFileHandle = fopen($ourFileName, "w") or die("can"t open file");

fclose($ourFileHandle);

Первая строчка $ourFileName = testFile.txt создает строковую переменную, в которой мы будем хранить имя файла.

Вторая строчка $ourFileHandle = fopen($ourFileName, ‘w’) or die(«can’t open file») соответственно создает или открывает уже существующий файл на запись. Или же возвращает сообщение, что не может открыть файл.

Третья строчка fclose($ourFileHandle) закрывает файл. На самом деле все просто.

Параметры открытия файла в php

Первый параметр ‘r’ (read) — открывает файл только на чтение, записывать в него будет нельзя.

Второй параметр ‘w’ (write) — открывает для записи. При этом всегда запись будет идти с начала файла. Если там уже есть какая то информация — то она будет перезаписана.

Третий параметр ‘a’ (append) — открывает файл на запись, но при этом будет дописывать в конец файла, в отличие от w.

Расширенные параметры:

Параметр ‘r+’ — открывает и на чтение и на запись. Указатель будет в начале файла.

Параметр ‘w+’ — открывает и на чтение и на запись, НО удаляет всю информацию, которая была в файле!!!

араметр ‘a+’ — открывает на чтение и запись, но указатель будет в конце файла.

Естественно, что функции можно передать только один из этих параметров, а не несколько. Их нужно подставлять вместо ‘X":

fopen($ourFileName, "X")

Запись в файл

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

$myFile = "testFile.txt";

$fh = fopen($myFile, "w") or die("can"t open file");

$stringData = "Первая строчкаn";

fwrite($fh, $stringData);

$stringData = "Вторая строчкаn";

fwrite($fh, $stringData);

Создали файл testFile.txt, указатель на него хранится в переменной $fn. Записали в него строчку «Первая строчка» (в конце применили символ конца строки n), а затем и «Вторая строчка». После чего закрыли файл.

ВНИМАНИЕ! Никогда не забывайте закрывать ваши файлы! Иначе в случае аварийного завершения выполнения скрипта — данные в файлах не сохранятся! Всегда после работы используйте fclose!!!

Чтение из файла

Записать записали, теперь давайте прочитаем! Это тоже не так сложно. Используем функцию fread. На вход ей подаем указатель на файл и количество байт, которое хотим прочитать. Например, один символ равен одному байту (зависит от кодировки), мы хотим прочитать 5 символов: $theData = fread($fh, 5).

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

$myFile = "testFile.txt";

$fh = fopen($myFile, "r");

$theData = fread($fh, filesize($myFile));

Надеюсь понятно объяснил.

$myFile = "testFile.txt";

$fh = fopen($myFile, "r");

$theData = fgets($fh);

В результате получим первую строчку из файла testFile.txt. Соответственно, чтобы пройтись по всем строчкам нужно использовать цикл foreach:

$lines = file("testFile.txt");

foreach($lines as $single_line)

echo $single_line . "
n";

Теперь вы научились открывать файлы на чтение, запись или на то и другое. Записывать в них данные или же дописывать сверху, с помощью Append, а также читать из них информацию.

Если вы самостоятельно усваиваете работу с php, то важно научиться читать данные из файла и вводить в него изменения. Запись в файл php ведется для разработки веб-приложений, изменений серверной информации и запуска внешний программ и включений.

Как работать с файлами php

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

PHP Expert Editor;
. Dreamweaver;
. Eclipse PHP Development;
. PHPEdit.

Если вы создаете сайт, то необходимо часто использовать идентичные конструкции, которые удобно хранить в виде шаблонов в другом файле. Для этого лучше использовать include. После ввода этой функции необходимо сделать запись в файл php имени и расширения подключения, например, include 1.php. Эта конструкция поддерживает возможность множественного чтения подключаемого файла, и дополнительной особенностью является непрерывность исполнения кода при ошибке. Если что-либо пойдет не так, то код продолжит исполняться с новой строки.
Таким образом, вы подключите файл к своему коду. Еще одним способом является ввод require. В отличие от вышеописанного include, файл подключается до начала выполнения программного кода, но обратиться к нему можно всего один раз.

Проверка файла

Перед тем, как сделать запись в файл php, необходимо убедится в том, что он существует, а затем открыть его и провести необходимое редактирование. Для этого можно использовать функцию file_exists(), если она подтвердит наличие, то в окне редактора будет возвращен ответ TRUE, в противном случае - FALSE.
О том, что возможна запись данных в файл php, вас может известить иная функция is_file(). Она более надежна, чем file_exits, и большинство программистов для начала работы использует именно is_file. После того, как вы убедились в существовании файла, можно приступать к работе с ним.

Внесение изменений в файл

Первым инструментом, который можно использовать для внесения изменений в файл - fwrite (). Она записывает строки со следующим синтаксисом:

Int - манипулятор;
. String - переменная.

Существует еще одна аналогичная этой функции - fputs(), которая является псевдонимом. Различий между этими инструментами нет, можно использовать по выбору один или другой. Для учеников более распространена fwrite, а практикующие программисты чаще всего используют fputs.

Чтобы внести php запись в текстовый файл, необходимо соблюсти одно важное условие - он должен быть открыт для правок. Располагаться такой файл должен в папке с правами на запись.

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

// Открыть текстовый файл
$f = fopen("text.txt", "w");
// Записать строку текста
fwrite($f, "Hello! Good day!");
// Закрыть текстовый файл
fclose($f);

В этом примере text.txt - имя документа. Вы можете назвать его иначе: «Hello! Good day!» - пример текста, он может быть совершенно произвольным. Все изменения автоматически сохраняться в открытом файле.

Отметим, что PHP - это общего назначения. Он интенсивно применяется для создания веб-приложений. Данное решение поддерживается большинством хостинг-провайдеров. Речь идет о лидере среди средств, которые применяются для создания веб-сайтов. Теперь вы знаете, как сделать запись в файл php.