Как записать в файл. Перенаправление файла в стандартный выходной поток. Работа с файловой системой

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"; // Исходная строка

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

Декларация с использованием квадратных скобок

Каждый элемент массива идентифицируется индексом или ключом. Чтобы явно указать индекс, заключите его в квадратные скобки. Индексы массива не должны нумеруться от нуля и не должны быть последовательными числами. Индекс 100, в то время как элемент Полины имеет индекс. Хотя массивы объявляются как переменные, они не могут быть вызваны одинаково.

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

If ($test)

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

Else

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

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

?>

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

If ($fp)

{

While (!feof($fp))

{

$mytext = fgets($fp, 999);

Массив. Таким образом, вы можете легко просмотреть структуру массива, включая номера индексов и значения. Ассоциативные массивы - это массивы, которые имеют ключ в виде текстовой строки. Объявление ассоциативных массивов такое же, как и для обычных массивов. Как вы можете видеть в приведенном выше примере, ключи массива представляют собой текстовые строки. Ссылаясь на таблицу, которая структурирована, основывается на данном ключе.

До сих пор мы использовали одномерные массивы. Это включает в себя создание следующего узла элемента, давая вам впечатление от дерева элементов. Многомерные массивы могут быть объявлены с последовательными индексами в квадратных скобках. В приведенном выше примере двумя основными «узлами» являются элементы с индексами 0, и каждый из этих элементов имеет последовательные имена, фамилию и названия улиц. Операция этой программы отобразит в браузере следующую структуру.

Echo $mytext."
";

}

}

Else

Fclose($fp);

?>

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

Echo readfile("counter.txt");

?>

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

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

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

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

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

Функция возвращает различия между массивами, заданными в параметрах. Результатом этой функции является массив, который содержит значения таблицы для таблицы1, которые отсутствуют в таблице2. Функция фильтрует элементы массива с функцией возврата. Вот пример фильтрации параметров и оставление только чисел. Первым параметром функции должен быть ключ или номер индекса; Второй параметр должен быть именем массива.

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(), которая принимает единственный параметр

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

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

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

file_put_contents — Пишет строку в файл

Описание

Int file_put_contents (string $filename , mixed $data [, int $flags = 0 [, resource $context ]])

Функция идентична последовательным успешным вызовам функций fopen() , fwrite() и fclose() .

Если filename не существует, файл будет создан. Иначе, существующий файл будет перезаписан, за исключением случая, если указан флаг FILE_APPEND .

Список параметров

Путь к записываемому файлу.

Записываемые данные. Может быть string , array или ресурсом stream .

Если data является ресурсом stream , оставшийся буфер этого потока будет скопирован в указанный файл. Это похоже на использование функции stream_copy_to_stream() .

Также вы можете передать одномерный массив в качестве параметра data . Это будет эквивалентно вызову file_put_contents($filename, implode("", $array)) .

Значением параметра flags может быть любая комбинация следующих флагов, соединенных бинарным оператором ИЛИ (| ).

context

Корректный ресурс контекста, созданный с помощью функции stream_context_create() .

Возвращаемые значения

Функция возвращает количество записанных байт в файл, или FALSE в случае ошибки.

Внимание

Эта функция может возвращать как boolean FALSE , так и не-boolean значение, которое приводится к FALSE . За более подробной информацией обратитесь к разделу Булев тип . Используйте оператор === для проверки значения, возвращаемого этой функцией.

Примеры

Пример #1 Пример простого использования

$file = "people.txt" ;
// Открываем файл для получения существующего содержимого
$current = file_get_contents ($file );
// Добавляем нового человека в файл
$current .= "John Smith\n" ;
// Пишем содержимое обратно в файл
file_put_contents ($file , $current );
?>



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

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

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