Как создать и прочитать файл php. File_put_contents - Пишет строку в файл. Внесение изменений в файл

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 соединение с указанием логина и пароля

?>

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

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

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

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 обязательный параметр.

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

В файле, содержащем имя, фамилию, возраст и название должности, есть 4 строки данных или записей. Чтобы прочитать файл и извлечь отдельные поля, начните с открытия файла в режиме чтения. Это приведет к выходу с полем в каждой строке. Фред Смит 45 Инженер Сьюзен Браун 33 Программист Эд Уильямс 24 Стажер Джо Эдвардс 29 Аналитик.

$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); // выводим содержимое файла

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

Установите родительский каталог, принадлежащий веб-группе, и разрешите запись группы. Установите родительский каталог, чтобы разрешить любую запись. . Выбор того, следует ли использовать групповую запись или все-запись, является личным предпочтением. На данный момент в нашей системе нет значимой разницы. Аналогичным образом выбор семантического и восьмеричного является одним из личных предпочтений. Просто будьте осторожны, чтобы не устанавливать каталоги для 666 разрешений, так как они не будут работать правильно, и результат может быть очень запутанным.

?>

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

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

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

?>

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

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

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

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

Если вы посмотрите в Интернете, вы можете найти совет, предлагающий установить все каталоги на 777 и все файлы на грубо переведенные. При принятии решения о том, что делать с записью, пожалуйста, помните старую пословицу: «Если у вас нет времени сделать это правильно, когда вы успеете это сделать?».

В частности, мы настоятельно запрещаем членам создавать файлы сценариев и ключевые каталоги, записываемые веб-пользователем. Этот параметр используется некоторыми приложениями для самообновления через Интернет. Мы также препятствуем этой практике; если вы можете обновить свой сайт через Интернет, так что может кто-то другой, и сайт может выглядеть совсем по-другому, когда он закончит с ним. Мы рекомендуем использовать внеполосные методы для обновления приложений сайта.

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");

Как и большинство языков программирования, 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);



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: