Создание, открытие, чтение, запись, удаление и проверка наличия файла в php

Алан-э-Дейл       10.03.2024 г.

Проверка на существование

В PHP есть два способа проверки директорий на существование. Первый заключается в использовании функции file_exists(). Принцип её работы обсуждался ранее в статье о правах доступа. Напомним, что функция принимает всего один строковой параметр — путь в файловой системе. Несмотря на то, что в названии содержится слово «file» она замечательно работает с директориями.

Второй способ связан со встроенной функцией is_dir(). Она, как и file_exists() принимает относительный или абсолютный путь расположения директории. Однако помимо проверки на существование также будет подтвержден тот факт, что по данному пути находится именно директория, а не файл. Если строка описывает место расположения жесткой или символической ссылки, is_dir() осуществит переход по ней и будет анализировать конечную точку пути. В случае успеха возвращается логическое значение true, а в случае неудачи false.

//создадим новую директорию в корне сайта для проверок $dirName = «{$_SERVER}/directory»; if (!file_exists($dirName)) {     mkdir($dirName); } var_dump(file_exists($dirName)); //Рузультат: bool(true) var_dump(is_dir($dirName)); //Рузультат: bool(true)

Заметка Функции, отвечающие за проверку директорий на существование, могут возвращать false при отсутствии прав доступа. Такие вещи не зависят от PHP-скрипта, это уровень ответственности операционной системы.

Writing the Files Using PHP fwrite() Function

Similarly, you can write data to a file or append to an existing file using the PHP function. The basic syntax of this function can be given with:

fwrite(file handle, string)

The function takes two parameter — A file handle and the string of data that is to be written, as demonstrated in the following example:

In the above example, if the «note.txt» file doesn’t exist PHP will automatically create it and write the data. But, if the «note.txt» file already exist, PHP will erase the contents of this file, if it has any, before writing the new data, however if you just want to append the file and preserve existing contents just use the instead of in the above example.

An alternative way is using the function. It is counterpart of function and provides an easy method of writing the data to a file without needing to open it. This function accepts the name and path to a file together with the data to be written to the file. Here’s an example:

If the file specified in the function already exists, PHP will overwrite it by default. If you would like to preserve the file’s contents you can pass the special flag as a third parameter to the function. It will simply append the new data to the file instead of overwitting it. Here’s an example:

Управление файлами

PHP содержит множество функций управления файлами.
Наиболее употребимыми являются:

  • touch() — создает пустой файл с заданным именем. Если такой
    файл уже существует, то функция изменит дату модификации. Например:
    touch( "ex1.txt" );
    
  • copy() — копирует файл.
    Для копирования файлов в php применяется функция copy ($source, $result). Ей нужно передать лишь два
    параметра
    — источник $source и имя файла-копии — $result. Стоит отметить, что следует указывать полные адреса к
    файлам.
    Пример применения функции copy:
  • unlink() — удаляет заданный файл. Например:

  • fopen( ) — открывает локальный или удаленный файл и возвращает
    указатель на него. Указатель используется во всех операциях с содержимым файла.
    Аргументы: имя файла и режим открытия.
    r чтение. Указатель файла устанавливается на его начало
    r+ чтение и запись. Указатель файла устанавливается на его начало
    w запись. Указатель файла устанавливается на его начало.
    Все старое содержимое файла теряется. Если файл с указанным именем не
    существует
    , функция пытается его создать
    w+ чтение и запись. Указатель файла устанавливается на его начало.
    Все старое содержимое файла теряется. Если файл с указанным именем не
    существует, функция пытается его создать
    a запись. Указатель файла устанавливается на его конец.
    Если файл с указанным именем не существует, функция пытается его создать
    a+ чтение и запись. Указатель файла устанавливается на его конец.
    Если файл с указанным именем не существует, функция пытается его создать

    Например:

    Если открыть файл не удалось, то можно прервать выполнение программы. Например:

    $fp = fopen( "ex1.txt", "w" ) or die ( "Не удалось открыть файл" );
    
  • fclose() — закрывает файл. Аргумент: указатель файла,
    полученный ранее от функции fopen(). Например:
    fclose( $fp );
    
  • feof() — проверка конца файла. Аргумент: указатель файла.
  • fgetc() — чтение очередного символа из файла. Аргумент:
    указатель файла.
  • fgets() — чтение очередной строки файла. Аргументы: указатель файла
    и длина считываемой строки. Операция прекращается либо после считывания
    указанного количества символов, либо после обнаружения конца строки или файла.
  • fread() — общая функция чтения из файла. Аргументы: указатель файла
    и количество считываемых символов.
  • fseek() — отступ от начала файла. Аргументы: указатель файла
    и смещение.
  • fputs() — запись строки в файл. Аргументы: указатель файла
    и строка.
  • fwrite() — полный аналог функции fputs( ).
  • flock() — блокирует файл, т.е. не позволяет другим пользователям
    читать этот файл или писать в него, пока тот, кто наложил блокировку не
    закончит работу с данным файлом.
    Аргументы: указатель файла и номер режима блокировки.
    1 Можно читать, нельзя писать
    2 Нельзя ни читать, ни писать
    3 Снятие блокировки

    Пример 7

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

В PHP версии 4.3.0 появились новые удобные функции работы с файлами:

  • file_get_contents() — прочитать весь файл или URL
  • file_put_contents() — записать файл

Проверка версии PHP через консоль

Теперь о том, как узнать версию PHP на сервере с помощью консоли. Для использования данного метода обязательно нужно подключение к серверу по SSH. На главном экране в хостинге TimeWeb есть переключатель, только при активации потребуется привязать номер телефона.

Теперь в панели инструментов хостинга жмем на элемент SSH-консоль.

В результате в новой вкладке откроется веб-консоль. Вводим в ней вот такую команду:

php -v

Жмем на кнопку Enter, и в консоли будет отображена основная информация о версии PHP для сервера. Но она может отличаться от той, что выбрана для вашего сайта.

Есть еще одна команда, позволяющая узнать подробное описание параметров сервера. Для этого надо активировать вот такую команду:

php – i

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

Для поиска более конкретных данных можно воспользоваться опцией grep. Например, чтобы найти версию PHP, нам надо ввести команду вот таким образом:

php -i | grep 'PHP Version'

Проверка существования переменной

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

Если переменная объявлена, но ей изначально не присвоено никакого значения (иначе говоря она не инициализирована), или если переменная вовсе неопределена, то нам будет проблематично ее использовать. Например:

<?php
$a;
echo $a;
?>

При попытке вывести значение переменной мы получим диагностическое сообщение о том, что переменная не определена:

Warning: Undefined variable $a in C:\localhost\hello.php on line 10

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

Для проверки существования переменной PHP предоставляет ряд встроенных функций.

Оператор isset

Функция isset() позволяет определить, инициализирована ли переменная или нет. Если переменная определена,
то возвращает значение . Если переменная не определена, то возвращает .
Также если переменная имеет значение функция также возвращает .

Например:

<?php
$message;
if(isset($message))
    echo $message;
else
    echo "переменная message не определена";
?>

Здесь переменная $message не инициализирована, поэтому выражение будет возвращать значение .

переменная message не определена

Теперь пусть переменная $message имеет начальное значение:

$message = "Hello PHP";
if(isset($message))
    echo $message;
else
    echo "переменная message не определена";

В этом случае выражение будет возвращать , поэтому будет выполняться инструкция :

Hello PHP

Однако если переменной присвоено начальное значение , то опять же будет считаться, что эта переменная не установлена:

$message = null;
if(isset($message))
    echo $message;
else
    echo "переменная message не определена";
переменная message не определена

empty

Функция проверяет переменную на «пустоту». «Пустая» переменная — это переменная, значение которой равно
, 0, или пустой строке — в этом случае функция возвращает :

<?php
$message = "";
if(empty($message))
    echo "переменная message не определена";
else
    echo $message;
?>

Здесь переменная хранит пустую строку, поэтому выражение возвратит .

переменная message не определена

При этом если строка содержит даже хотя бы один пробел и больше ничего (), то такая строка уже не считается пустой.

unset

С помощью функции unset() мы можем уничтожить переменную:

<?php
$a=20;
echo $a; // 20
unset($a);
echo $a; // ошибка, переменная не определена
?>

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

НазадВперед

Настройка файла php.ini

Для удобства ориентирования мы разобьем все параметры по категориях в зависимости от их назначения. Вам будет достаточно найти нужный параметр и изменить его значение. А теперь откройте файл настроек php, например, для модуля apache и перейдем к настройке. Чтобы избежать ошибок не добавляйте новые строки, а ищите уже существующие и изменяйте значения на нужные:

Сначала идет немного информации о самом файле в виде комментариев, затем интересующие нас настройки.

Вывод ошибок в php

Настройка php 7 обычно начинается с конфигурации вывода ошибок. Все настройки вывода ошибок находятся в разделе Error handling and logging. По умолчанию вывод ошибок на экран во время выполнения скрипта отключен. Это сделано для того, чтобы пользователи не смогли увидеть ничего лишнего. Вместо этого, все ошибки записываются в лог файл. Если вы используете php на домашнем компьютере, то такие меры не нужны и вы можете сразу выводить все на экран:

Замените off на on. В php используются различные типы ошибок, например, критические, предупреждения, ошибки синтаксиса, с помощью строки error_reporting вы можете включить вывод только определенных типов ошибок:

Если нужно объединить несколько типов ошибок, то используйте символ &, а для отключения отображения поставьте перед типом знак ~. Приведенный выше пример отображает все ошибки (E_ALL), кроме сообщений об устаревших функциях (E_DEPRECATED). Вы можете отключить все типы использовав 0:

Включите запись ошибок php в лог файл, если не выводите их на экран:

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

Ограничения ресурсов

Если бы скрипты php никак не ограничивались в ресурсах, то они запросто могли бы перегрузить сервер и не дать ему нормально работать. Поэтому, по умолчанию php устанавливает жесткие ограничения, но, возможно, вам нужно будет их немного ослабить.

По умолчанию максимальное время выполнения скрипта — 30 секунд, сделаем минуту:

Если указать 0, то скрипт может выполняться бесконечно. Вы также можете ограничить время, на протяжении которого скрипт будет загружать данные, 60 секунд:

Максимальное количество переменных в GET и POST:

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

Максимальный размер данных, передаваемых в POST запросе тоже ограничивается, размер по умолчанию — 8 Мегабайт:

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

С помощью директив disable_functions и disable_classes вы можете отключить использование в скриптах определенных функций или классов, например, это может быть полезно для веб-хостингов. В этом примере мы отключаем использование функции ini_set, которая позволяет менять настройки php из скрипта:

Директории по умолчанию

Файл настройки php.ini позволяет указать пути в файловой системе по умолчанию для различных действий. Вы можете задать папки где система будет искать скрипты, если вы попытаетесь подключить их с помощью инструкции include:

Папка с модулями php:

Папка для записи временных файлов:

Загрузка файлов

Для того чтобы пользователи могли загружать свои файлы на сервер, например, фото, нужно включить эту функцию в php:

Максимальный размер загружаемого файла:

Максимальное количество файлов, которые может загрузить один скрипт:

Настройка php.ini практически завершена, нам остались лишь расширения.

Настройка расширений

Расширения позволяют очень сильно увеличить функциональность php. Например, благодаря расширениям вы можете использовать в своих скриптах базы данных mysql, postgresql, mysqli, sqlite, графическую библиотеку gd и многое другое. Все это включается в этом разделе.

Для включения расширения достаточно убрать комментарий перед строкой с его командой, например:

Обратите внимание, что для windows расширение будет иметь формат dll, но для linux нужно использовать so. В следующих секциях идет настройка каждого из расширений, но мы их рассматривать не будем потому что они обычно не требуют настройки

Создание сценария загрузки файла

Итак, создадим файл со следующим содержимым:

upload.php

Рассмотрим объявленные переменные в сценарии PHP:

  • — директория, в которую будет помещен загружаемый файл.
  • — путь к загружаемому файлу
  • — флаг, назначение которого будет объяснено ниже
  • — расширения загружаемых файлов (в нижнем регистре)

Функция возвращает ассоциированный массив, содержащий информацию об имени, расширении и директории файла. Первым параметром мы передали (путь к загружаемому файлу), а вторым — (расширение файла). С помощью функции все буквенные символы расширеня переводим в нижний регистр.

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

Является ли временный файл изображением проверим с помощью функции , которая определит размер любого заданного, поддерживаемого изображения и вернет этот размер вместе с типом файла и текстовой строкой , которую можно будет использовать внутри тега HTML <img>, а также вернет соответствующий тип содержимого HTTP.

Примечание: Файлы будут загружены в каталог «uploads/», поэтому вам нужно создать его в каталоге, в котором находится файл «upload.php».

Проверка существования файла

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

// Проверка существования файла
if (file_exists($target_file)) {
  echo «Извините, файл уже существует»;
  $uploadOk = 0;
}

Нелинейная обработка файла: перемещение по файлу

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

1

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

1

Начиная с PHP V4.0, доступны также несколько других опций. Например, если нужно перейти вперед на 100 байт от вашей текущей позиции, вы можете использовать следующий код:

1

Аналогично, переход назад на 100 байт осуществляется посредством:

1

Если вы хотите перейти назад в положение 100 байт до конца файла, используйте вместо этого.

1

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

Примечание:вы не можете использоватьв дескрипторах файла, ссылающихся на URL.

PHP Создание HTML формы

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

<!DOCTYPE html><html><body><form action=»upload.php» method=»post»
enctype=»multipart/form-data»>    Выберите изображение для загрузки:    <input type=»file» name=»fileToUpload» id=»fileToUpload»>    <input type=»submit» value=»Загрузить изображение» name=»submit»>
</form></body></html>

Некоторые правила, которым нужно следовать для HTML формы:

  • Убедитесь, что форма использует
  • Форма также нуждается в следующем атрибуте: .
    Он указывает, какой тип контента использовать при отправке формы

Без вышеуказанных требований загрузка файла не будет работать.

Другие вещи, чтобы заметить:

Атрибут type=»file», тега ,
показывает поле ввода, как элемент управления выбор файла в «Браузере», кнопка рядом с элементом управления ввода

Форма отправляет данные в файл с именем «upload.php», что мы создадим дальше.

Работа с файлами с помощью fopen()

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

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

Итак, открыть (или создать и открыть) файл можно с помощью функции fopen():

Функция fopen() возвращает так называемый лескриптор. Это ссылка, указатель на файл, его мы будем передавать в другие функции. Кстати, тип данных этого дескриптора — resource.

Первым параметром мы передаём путь к файлу, вторым — модификатор доступа к файлу. Ниже перечислены наиболее популярные модификаторы:

  • r — открытие для чтения, указатель переходит в начало файла.
  • r+ — открытие для чтения и записи, указатель переходит в начало файла.
  • w — открытие для записи, указатель переходит в начало файла. Если файла нет — создаётся, если есть — очищается от данных.
  • w+ — открытие для чтения и записи, в остальном аналогичен w.
  • a — открытие для записи, указатель переходит в конец файла. Если файла нет — создаётся.
  • a+ — открытие для чтения и записи, в остальном аналогичен a.
  • x — создание и открытие для записи, указатель переходит в начало файла. Если файл существует — PHP покажет ошибку.
  • x+ — создание и открытие для чтения и записи, в остальном аналогичен x.

Указатель — это нечто вроде курсора. Вы можете переместить его в любое место файла, чтобы добавить или отредактировать определённые данные.

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

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

Для построчного чтения файла используется функция fgets():

При каждом запуске fgets получает следующую строку и возвращает её в $line. Вторым параметром передаётся максимальная длина строки. Это означает, что если строка слишком длинная, она будет обрезана.

Summary

  • A file is a resource for storing data
  • PHP has a rich collection of built in functions that simplify working with files.
  • Common file functions include fopen, fclose, file_get_contents
  • The table below shows a summary of the functions covered
Function Description
File_exists Used to determine if a file exists or not
fopen Used to open a file. Returns a pointer to the opened file
fwrite Used to write to files
fclose Used to open closed files
fgets Used to read a file line by line
copy Used to copy an existing file
unlink Used to delete an existing file
file_get_contents Used to return the contents of a file as a string

Воспользуемся итераторами SPL

Теперь рассмотрим использование итераторов SPL. Но прежде, чем приступить к решению нашей задачи, проведем введение в библиотеку SPL и итераторы. Библиотека SPL предоставляет серию классов для объектно ориентированных структур данных, итераторов, дескрипторов файлов и прочее.

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

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

Как уже сообщалось во водной части урока, мы рассмотрим использование  , и . Первый наследуется от , а остальные от . Они все имеют один и тот же конструктор, который принимает два параметра:

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

Реальное различие в данных итераторах заключается в их использовании для навигации по заданному пути.

Использовать очень просто. Рассмотрим в действии. Представляем два примера. Первый показывает поиск всех файлов и каталогов, имена которых начинаются на “te”. Второй пример использует другой итератор для поиска всех файлов и каталогов, имена которых заканчиваются на “t.dat” или “t.php”. Итератор используется для фильтрации результата на основе регулярных выражений.

<?php
$iterator = new FilesystemIterator(".");
$filelist = array();
foreach($iterator as $entry) {
    if (strpos($entry->getFilename(), "te") === 0) {
        $filelist[] = $entry->getFilename();
    }
}

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

Второй пример с применением :

<?php
$iterator = new FilesystemIterator(".");
$filter = new RegexIterator($iterator, '/t\.(php|dat)$/');
$filelist = array();
foreach($filter as $entry) {
    $filelist[] = $entry->getFilename();
}

Он будет выводить:

array (
  0 => 'script.php',
  1 => 'test.dat'
)

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

<?php
$iterator = new RecursiveDirectoryIterator('.');
$filter = new RegexIterator($iterator->getChildren(), '/t\.(php|dat)$/');
$filelist = array();
foreach($filter as $entry) {
    $filelist[] = $entry->getFilename();
}

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

<?php
$iterator = new GlobIterator("te*");
$filelist = array();
foreach($iterator as $entry) {
    $filelist[] = $entry->getFilename();
}

Проверка наличия файла

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

Самый простой способ проверить, существует ли файл, — использовать функцию PHP . Он вернет , если файл или каталог с заданным существует и в противном случае. Это может быть очевидно, но я хотел бы указать, что не обязательно должно быть именем файла. Это также может быть абсолютный или относительный путь. Например, мы могли бы использовать prime_numbers.txt или science/project/period_table.txt.

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

В отличие от , эта функция возвращает только , если указанный путь указывает на файл, а не на каталог

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

Убедимся, что файл фактически существует

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

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

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

Проверьте, существует ли файл

При проверке существования файла наиболее часто используются операторы FILE и . Первый проверит, существует ли файл независимо от типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (а не каталогом или устройством).

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

Если вы хотите выполнить другое действие в зависимости от того, существует файл или нет, просто используйте конструкцию if / then:

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

Вы также можете использовать команду test без оператора if. Команда после оператора будет выполнена только в том случае, если статус выхода тестовой команды — истина,

Если вы хотите запустить серию команд после оператора просто заключите команды в фигурные скобки, разделенные или :

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

Set-Content

Set-Content — это командлет обработки строк, который записывает новое содержимое или заменяет содержимое в файле. Set-Content заменяет существующее содержимое и отличается от командлета Add-Content, который добавляет содержимое в файл. Чтобы отправить контент в Set-Content, вы можете использовать параметр -Value в командной строке или отправить контент через конвейер.

Например, следующие команды равнозначны:

Get-Help about_Comparison_Operators -Full > man.txt
Get-Help about_Comparison_Operators -Full | Set-Content man.txt

Вместо Set-Content вы можете использовать встроенный псевдоним этой команды «sc».

Set-Content предназначен для обработки строк. Если вы передаёте нестроковые объекты по конвейеру Set-Content, он преобразует объект в строку перед её записью. Для записи объектов в файлы используйте Out-File.

Командлет Set-Content разработан для работы с данными, предоставляемыми любым провайдером. Чтобы вывести список поставщиков, доступных в вашем сеансе, введите

Get-PsProvider

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

Get-Help about_Comparison_Operators -Full | Set-Content man.txt
Get-Help about_Comparison_Operators -Full | Set-Content -Path man.txt

Опции -Path можно найти применение, поскольку она поддерживает подстановочные символы, например:

Get-Help about_Comparison_Operators -Full | Set-Content -Path man.txt

Предыдущая команда НЕ означает, что будет созданы 3 файла с именами man1.txt, man2.txt, man3.txt и одинаковым содержимым. Эта команда означает, что будет выполнен поиск файлов по указанному образцу, и если таких файлов нет, то программа завершиться ошибкой.

При рабоче с группой файлов вы можете комбинировать с опцией -Path опцию -Exclude (исключить файлы по указанному шаблону) и опцию -Include (включить файлы по указанному шаблону). Обе эти опции также поддерживают подстановочные знаки.

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

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

Set-Content -Value "String to save" str.txt

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

Опция -AsByteStream указывает, что содержимое следует читать как поток байтов. Этот параметр был введён в PowerShell 6.0. Предупреждение возникает при использовании параметра -AsByteStream с параметром -Encoding. Параметр AsByteStream игнорирует любую кодировку, и выходные данные возвращаются в виде потока байтов.

Опция -Encoding задаёт тип кодировки для целевого файла. Значение по умолчанию — UTF8NoBOM. Кодировка — это динамический параметр, который поставщик FileSystem добавляет в Set-Content. Этот параметр работает только на дисках с файловой системой. Допустимые значения этого параметра следующие:

  • ASCII: использует кодировку для набора символов ASCII (7-бит).
  • BigEndianUnicode: кодирует в формате UTF-16, используя порядок байтов с прямым порядком байтов.
  • OEM: использует кодировку по умолчанию для MS-DOS и консольных программ.
  • Unicode: кодируется в формате UTF-16 с использованием порядка байтов с прямым порядком байтов.
  • UTF7: кодирует в формате UTF-7.
  • UTF8: кодирует в формате UTF-8.
  • UTF8BOM: кодирует в формате UTF-8 с меткой порядка байтов (BOM)
  • UTF8NoBOM: кодирует в формате UTF-8 без метки порядка байтов (BOM)
  • UTF32: кодирует в формате UTF-32.

Начиная с PowerShell 6.2, параметр -Encoding также позволяет использовать числовые идентификаторы зарегистрированных кодовых страниц (например, «-Encoding 1251») или строковые имена зарегистрированных кодовых страниц (например, «-Encoding «windows-1251″».

Гость форума
От: admin

Эта тема закрыта для публикации ответов.