Если вы самостоятельно усваиваете работу с 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.

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

Чтобы создать файл на php в исполняемом скрипте надо всего лишь указать несколько функций:

Рассмотрим сразу пример:

$text = "Какой-то тут текст для записи в файл";
$fp = fopen("file.txt", "w");
fwrite($fp, $text);
fclose($fp);
?>

Тут вы должны знать :

fopen() - функция открывает файл чтения или для записи и уточнениями;

Это уточнения (параметр mode функции fopen) очень важно:

  • "r " - открыть файл в php ТОЛЬКО для чтения . Курсор помещается в начало.
  • "r+ " - открыть файл в php для чтения и для записи . Курсор помещается в начало. !!! - при этих двух режимах r и r+ файлы уже должны быть созданы(иначе вылезет ошибка Warning: fopen(file.txt) : failed to open stream: No such file or directory in ... ), а мы лишь читаем или у нас есть возможность дописывать.
  • "w " - открывается файл ТОЛЬКО для записи. Файл урезается до нулевой длины - то есть затирается. Записывается, что нужно и Курсор ставится в начало.
  • "w+ " - открывается файл для записи И ЧТЕНИЯ! Остальное то же самое что и в режиме "w". !!! - при этих двух режимах - если файл не был создан - ПРЕДПРИМЕТСЯ ПОПЫТКА ЕГО СОЗДАТЬ!
  • "a " - открыть файл ТОЛЬКО для записи. В отличие от "w" этот параметр не затирает содержимое файла, а ставит курсор в конец строки и добавляет в конец содержимое, которое мы хотели добавить.
  • "a+ " - открыть файл для записи и чтения.

fwrite ($fp, $text) - функция записи в файл на php - то есть то что находится в переменной $text записывается в файл, который находится в переменной $fp;

fclose ($fp) - функция закрытия файла, который мы записали в переменную $fp;

Все теперь вы спокойно можете создавать правильно файлы на php, открывать их для чтения и редактирования.

Полезные дополнения и функции PHP для работы с открытым файлом:

while(!feof($fp)){
$mytext = fgets($fp, 99);
echo $mytext."
";
}

здесь выполняется условие - "пока не достигнут конец файла то делай то то" while(!feof($fp))

1. Функция fgets ($fp, 99) - позволяет разделить все содержимое на участки в 99 байт и далее, чтобы это отчетливее увидеть мы помещаем тег

Эта функция string fgets (resource handle [, int length]) по умолчанию принимает в параметр length 1024 байта(1 килобайт), если не указать так и будет. Этот параметр необязателен с PHP 4.2.0 (В случае ошибки возвращает FALSE)

Доп функции для открытия, записи и создания файла

Функция - int readfile (string filename [, bool use_include_path [, resource context]]) - считываем файл как единое целое.

Читает файл и записывает содержимое в буфер вывода. И возвращает количество выведенных байт. В случае ошибки вернет, если не использована собачка - @readfile.

Что-то подобное получится:

В конце слова тег стоят
.

б. Функция - array file (string filename [, int use_include_path [, resource context]]), делает то же самое, что и функция readfile, за одним исключением она добавляет содержимое файла в массив:

Таким образом можно считывать любые странички в интернете: $lines = file("http://сайт/"); и перебрать массив через функцию foreach;

3а. Функция string file_get_contents (string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]]) - позволяет получить содержимое в виде одной строки.

Это более универсальная функция PHP для считывания файла, похожа на функцию file, только содержимое возвращается в строку, а не в массив и можно задавать условия - с какого байта начинать - offset и с какого заканчивать - maxlen . При неудаче вернет FALSE.

Важно!!! - в этом случае функция заменяет сразу 3: fopen(), fread() и fclose() и таким образом избавляет от мароки.

3б. Функция int file_put_contents (string filename, mixed data [, int flags [, resource context]]) - идентична последовательному вызову функций fopen(), fwrite() и fclose() - возвращает количество записанных байт.

Последнее обновление: 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); fclose($fh);

Создали файл 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)); fclose($fh); echo $theData;

Надеюсь понятно объяснил.
Иногда же полезно читать файл построчно, а не по количеству байт. Для этого вместо fread нужно просто использовать fgets:

$myFile = "testFile.txt"; $fh = fopen($myFile, "r"); $theData = fgets($fh); fclose($fh); echo $theData;

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

\n"; ?>

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

PHP - Работа с файлами

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

Работа с файлами разделяется на 3 этапа:

  • Открытие файла.
  • Манипуляции с данными.
  • Закрытие файла.

I. Открытие файла

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

Согласно документации PHP выделяют следующие виды режимов файлов:

  • r – открытие файла только для чтения.
  • r+ - открытие файла одновременно на чтение и запись.
  • w – создание нового пустого файла. Если на момент вызова уже существует такой файл, то он уничтожается.
  • w+ - аналогичен r+, только если на момент вызова файла такой существует, его содержимое удаляется.
  • a – открывает существующий файл в режиме записи, при этом указатель сдвигается на последний байт файла (на конец файла).
  • a+ - открывает файл в режиме чтения и записи при этом указатель сдвигается на последний байт файла (на конец файла). Содержимое файла не удаляется.

Примечание: в конце любой из строк может существовать еще один необязательный параметр: b или t. Если указан b, то файл открывается в режиме бинарного чтения/записи. Если же t, то для файла устанавливается режим трансляции перевода строки, т.е. он воспринимается как текстовый.

Для демонстрации рассмотрим следующий сценарий:

//Открывает файл в разных режимах

$fp = fopen("counter.txt", "r"); // Бинарный режим

$fp = fopen("counter.txt", "rt"); // Текстовый режим

$fp = fopen("http://www.yandex.ru", "r");// Открывает HTTP соединение на чтение

$fp = fopen("ftp://user:[email protected]", "w"); //Открываем FTP соединение с указанием логина и пароля

II. Манипуляции с данными файла

Записывать данные в файл при помощи PHP можно при помощи функции fwrite(). Это функция принимает 2 обязательных параметра и 1 необязательный. В качестве обязательных параметров выступает дескриптор файла и режим файла:

$fp = fopen("counter.txt", "a"); // Открываем файл в режиме записи

$mytext = "Это строку необходимо нам записать\r\n"; // Исходная строка

$test = fwrite($fp, $mytext); // Запись в файл

If ($test)

Echo "Данные в файл успешно занесены.";

Else

Echo "Ошибка при записи в файл.";

Fclose($fp); //Закрытие файла

Для построчного считывания файла используют функцию fgets(). Функция принимает 2 обязательных параметра:

If ($fp)

While (!feof($fp))

$mytext = fgets($fp, 999);

Echo $mytext."
";

Else

Fclose($fp);

Примечание: В данном примере значение 999 определяет количество символов, которые будут считываться до тех пор, пока указатель не достигнет конца файла (EOF).

Echo readfile("counter.txt");

Также можно использовать функцию fpassthru() которая принимает 1 обязательный параметр. Перед использованием этой функции необходимо открыть файл в режиме чтения. По окончанию считывания файла функция автоматически закрывает файл(при этом дескриптор файла становиться недействительным).

$fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения

If ($fp)

Echo fpassthru($fp);

Else

Echo "Ошибка при открытии файла";

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

Примечание: Не следует применять функцию file() к двоичным файлам (binary-safe), т.к. она не является безопасной в плане считывания двоичных файлов, если при этом, где-то встретиться символ конца файла (EOF), то она не гарантирует вам чтение всего двоичного файла.

$file_array = file("counter.txt"); // Считывание файла в массив $file_array

// Работа с данными массива

Примечание: Работа с массивами подробно описывается здесь, авторы: Мухаметшин Д.Ф., Симдянов И.В.

В конце статьи, вы найдете хороший «сборник рецептов» по массивам, который дает решение многих проблем, с которыми ежедневно встречается веб-программист.

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

$fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения

If ($fp)

While(!feof($fp))

$char = fgetc($fp);

If ($char == "с")

$i = $i + 1;// Находим символ «с»

Echo "Количество букв "c" в файле: ". $i;

Else echo "Ошибка при открытии файла";

III. Закрытие файла

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

$fp = fopen("counter.txt", "r");

If ($fp)

Echo "Файл открыт";

Fclose($fp); // Закрытие файла

Сборник рецептов

1) Нам необходимо проверить существует ли тот или иной файл. Для этого мы воспользуемся функцией file_exists().

myfile("counter.txt"); // Используем функцию myfile, передав в качестве аргумента имя файла

function myfile($name) //Создаем функцию для проверки существования файла

If (file_exists($name)) echo "Файл существует";

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

2) Определяем размер файла с помощью функции filesize()

myfile("counter.txt");

//Создаем функцию для проверки существования файла и определения размера файла

function myfile($name)

If (file_exists($name)) echo "Размер файла: ".filesize($name)." байт";

Else echo "Файл не существует";

3) Создание временного файла с помощью функции tmpfile()

$myfile = tmpfile();

// Записываем во временный файл

Fwrite($myfile, "Эта строка записывается во временный файл.");

Fseek($myfile, 0); // Устанавливаем указатель файла

Echo fread($myfile, 1024); // выводим содержимое файла

4) Вам необходимо определить количество строк в файле. Для этого используем функцию count()

$fp = file("counter.txt");

Echo "Количество строк в файле: ".count($fp);

5) Нам необходимо использовать механизм блокировки файла

$fp = fopen("counter.txt", "a");

Flock($fp, LOCK_EX); // Блокирование файла для записи

Fwrite($fp, "Строка для записи");

Flock($fp, LOCK_UN); // Снятие блокировки

Fclose($fp);

6) Нам необходимо удалить определенную строку из файла

$num_stroka = 5; //Удалим 5 строку из файла

$file = file("counter.txt"); // Считываем весь файл в массив

For($i = 0; $i < sizeof($file); $i++)

If($i == $num_stroka) unset($file[$i]);

$fp = fopen("counter.txt", "w");

Fputs($fp, implode("", $file));

Fclose($fp);

7) Определение типа файла. Используем функцию filetype(), которая принимает единственный параметр

$mytype = filetype("counter.txt");

Echo "Тип файла: ".$mytype;

После вызова строка может содержат одно из следующих значений:

file – обычный файл

dir – каталог

fifo – fifo-канал

block – блочно - ориентированное устройство

char – символьно - ориентированное устройство

unknown – неизвестный тип файла

8) Если вы хотите просмотреть все параметры файла, то следует воспользоваться функцией stat()

$filename = stat("counter.txt");

Echo "

";

Print_r($filename);

Echo "

";

9) Нам необходимо очистить файл, используем функцию ftruncate()

$fp = fopen("counter.txt", "a"); //Открываем файл в режиме записи

Ftruncate($fp, 0) // очищаем файл

10) Нам необходимо узнать дату последнего изменения файла, используем функцию filectime(). Функция возвращает значение времени в форме Unix timestamp.

Echo filectime("counter.txt");