Динамическое создание файла в заданной директории с последующей записью в него, помогает решить ряд проблем. С одной из них столкнулся и я, создавая демонстрацию демо-версии на одном из сайтов. Уже сначала было решено: не создавать для каждой статьи отдельную папку для хранения файла с кодом демо-версии, а хранить его содержимое в базе данных. В этом случае, при подготовке демо-страницы, нужно производить выборку демо-кода из базы данных и затем выводить саму демку.
Все было бы ничего, но в одной статье пришлось выводить «PHP» - код из базы, в результате получил игнорирование данного кода, т.е. не обработку данного скрипта, а простой вывод написанного кода. Тогда я понял, что все мои идеи и написанный код накрылись «медным тазом», но оказалось, программирование не имеет границ. Тогда мне пришла идея при выводе демо-страницы создавать динамически файл, а если он уже существует, то просто перезаписывать его новым содержимым. Таким образом, не накапливается куча файлов на сервере, а растет только размер базы данных.
Создается файл на PHP следующим образом:
//полученный результат после запроса в базу $data['demo'] = "Ваш запрос в базу данных для получения кода демо-версии"; // открываем файл, если файл не существует, //делам попытку создать его $create_file = fopen("temp_file.php", "w"); // записываем в файл текст fwrite($create_file, $data['demo']); // закрываем файл fclose($create_file);
Код выше создаст файл temp_file.php и запишет в него полученные из базы данные, уже хранящиеся в массиве $data ['demo']. Но нужно помнить и быть аккуратным, т.к. если файл с таким именем уже существует, то все содержимое в нем будет (утеряно) перезаписано на новое.
В этом случае можно проверить существование файла например так:
// $data['demo'] = "0123456789"; if ( !file_exists( " temp_file.php " ) ) { // если файл НЕ существует то создадим его и запишем в него значение $data['demo'] $create_file = fopen ("temp_file.php ", "w"); fwrite($create_file, $data['demo']); fclose($create_file); } else { echo 'Создать файл не удалось. Файл был создан раньше или возникла ошибка при создании файла.'; }
В функции fopen() после имени файла указывается параметр (флаг) "w" необходимый для указания режима работы с файлом. Существует 6 таких параметров для использования.
- "r" – Файл открывается только для его чтения; указатель помещается в начало файла.
- "r+" – Файл открывается для чтения и разрешает произвести запись в него; указатель помещается в начало файла.
- "w" – Файл открывается для записи; указатель помещается в начало файла. Если файл не существует, делается попытка создать его.
- "w+" – Файл открывается для чтения и разрешает произвести запись в него; указатель помещается в начало файла. Если файл не существует, делается попытка создать его.
- "a" – Файл открывается только для записи; указатель помещается в конец файла. Если файл не существует, делается попытка создать его.
- "a+" – Файл открывается для чтения и разрешает произвести запись в него; указатель помещается в конец файла. Если файл не существует, делается попытка создать его.
В этой же функции fopen() задается и директория, в которой нужно создать наш файл. В примере файл создастся в текущей директории (в корне проекта).
Вот некоторые правила описания пути к файлу.
- temp_file.php – Файл расположен в текущей директории.
- ./views/temp_file.php – Файл расположен в папке views, которая находящейся в текущей директории. Длина директории не ограничивается.
- ../temp_file.php – Файл расположен в предыдущей директории. Каждый знак ../ расценивается как возврат в родительскую директорию.
- ../views/temp_file.php – Файл расположен в папке views, которая лежит в предыдущей директории.
Например, чтобы создать файл в каталоге, который на 3 уровня выше текущей директории (считаем корень проекта) формируем такую структуру записи:
Пример: ./application(папка1)/views(папка2)/demo_view(папка3)/temp_file_view.php
Вот таким, достаточно, простым способом можно создать файл и заполнить его какой-либо информацией.