Главная страница » Статьи и уроки » PHP статьи » PHP: Создание файла. Использование временных файлов
Опрос
Какие статьи добавлять?
Выделенные и виртуальные серверы в Европе

PHP: Создание файла. Использование временных файлов

Автор: administrator Дата: 29-04-2018, 18:01 Категория: Статьи и уроки / 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() рассматривается детально в следующих уроках данного учебного курса. Она обладает более широким функционалом, который раскрывается в ином контексте.

  • Не нравится
  • 0
  • Нравится
Просмотров: 858 Напечатать Жалоба
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.
Написать комментарий
Ваше Имя:
Ваш E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Код: Кликните на изображение чтобы обновить код, если он неразборчив
Введите код: