Создание файла в PHP. Как использовать временные файлы?

создание файла в php. как использовать временные файлы?

Простое создание файла

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

Самым простым способом является использование функции touch(). Она применяется для установки времени последнего доступа к файлу. Если файл не существует, touch() создаст его. Принцип работы очень прост. Функция принимает три параметра: имя файла, время касания и время доступа в формате timestamp. Параметры времени являются необязательными.

//Создание файла в корневой директории сайта
if (touch($_SERVER['DOCUMENT_ROOT']. '/file.txt')) {
    echo 'Создание файла прошло успешно';

} else {
    echo 'Невозможно создать файл';
}

Универсальная функция fopen

Функция fopen() используется в PHP как для создания нового файла, так и для открытия уже существующего. Она возвращает дескриптор, который может использоваться в ряде других функций. fopen() в первом параметре принимает имя файла, а во втором режим доступа. Режим доступа определяет: применимые операции, позицию файлового указателя, должен ли файл создаваться в случае отсутствия и нужно ли отбрасывать его содержимое.

Режим доступа задается строкой, состоящей из управляющих символов. Функция fopen() вернет логическое значение false в случае невозможности открытия файла. Например, если указан режим доступа «чтение», но права, заданные для файла, не позволяют осуществлять данную операцию.

Список режимов доступа к файлу:

Значение Чтение Запись Усечение Указатель Создание
r Да Нет Нет Начало Нет
r+ Да Да Нет Начало Нет
w Нет Да Да Начало Да
w+ Да Да Да Начало Да
a Нет Да Нет Конец Да
a+ Да Да Нет Конец Да
x Нет Да Нет Начало Да
x+ Да Да Нет Начало Да
c Нет Да Нет Начало Да
с+ Да Да Нет Начало Да

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

Как вы могли заметить режимы w и w+ схожи с x и x+. Между ними всё же есть отличие. Режимы x возвращают false если файл уже существует, но в случае отсутствия – создают его. Нужно быть очень аккуратным при работе с режимами c и с+. Они устанавливают указатель на начало файла, но не затирают предыдущее содержимое. Новые строки будут заменять прежний контент.

//Создаем файл в режиме записи
$descriptor = fopen($_SERVER['DOCUMENT_ROOT']. '/file.txt', 'w');
if ($descriptor !== null) {
    //Записываем короткий текст в файл
    fwrite($descriptor, 'Жизнь требует движения (Аристотель)');
    fclose($descriptor);

} else {
    echo 'Невозможно создать файл';
}

Заметка
У функции fopen() есть третий параметр логического типа, который по умолчанию устанавливается в false. Он связан с настройками интерпретатора PHP. Опция include_path конфигурационного файла php.ini указывает директорию подключаемых файлов. Если установить третий параметр fopen() в true, поиск и создание файлов будет вестись в этой директории.

Создание временного файла

Ряд задач, решаемых в PHP, требуют создания временного хранилища информации. Для этого могут быть использованы временные файлы. Функция tpmfile() не принимает никаких параметров. Она возвращает дескриптор файла, который, по сути, является областью оперативной памяти. С этим дескриптором работают все те же функции, что и с обычными файлами. Временный файл будет уничтожен после завершения выполнения скрипта или при вызове функции fclose().

//Создаем временный файл, записываем в него фразу,
//перемещаем указатель в начало и выводим текст
//в браузер
$descriptor = tmpfile();
fwrite($descriptor, 'Тестовая фраза');
rewind($descriptor);
echo fgets($descriptor);

Также существует возможность создания реального файла с случайно генерируемым именем. За это отвечает функция tempnam(). Ей в первом параметре необходимо указать директорию размещения, а во втором префикс имени файла. Функция вернет полное сгенерированное имя. Его можно использовать для дальнейших операций с помощью fopen(). Такой файл будет существовать и после завершения работы скрипта. Если он не потребуется в дальнейшем, используйте функцию unlink() для удаления.

//Генерируем случайный файл и выводим его имя
echo tempnam($_SERVER['DOCUMENT_ROOT'], 'rand-');

Одновременное создание и запись

В PHP существует возможность заменить последовательность операций создания файла, записи информации и освобождения дескриптора, всего одним вызовом. Для этого используйте функцию file_put_contents(). Передайте ей два параметра: имя файла и данные для записи. Если файл не существует, он будет создан.

//Используем специальную функцию для одновременного
//создания файла и записи в него информации
file_put_contents(
    $_SERVER['DOCUMENT_ROOT']. '/file.txt',
    'Работать без дескрипторов бывает удобно'
);

Заметка
Функция file_put_contents() рассматривается детально в следующих уроках данного учебного курса. Она обладает более широким функционалом, который раскрывается в ином контексте.

Последние публикации