Содержание
8.4. Файл lang_and_time_zone.php
Этот файл выполняет функцию начального экрана установщика и предоставляет пользователю выбор язык приложения и временную зону, а также создает файл конфигурации config.php в директории /includes/ и записывает в него переменные $lang_select и $timezone_select, полученные из форм выбора.
- $lang_select - выбор языка приложения (русский и англиский, при необходимости можно добавлять переводы)
- $timezone_select - время сервера приложения (время написания поста, время отправки сообщений и т.д.)
Формы
<form action="install.php" method="post"> </form>
- form action=«install.php» - указывает обработчик, к которому обращаются данные формы при их отправке на сервер.
В нашем случае это переход к файлу install.php (подробнее файл install.php будет описан в Главе 8.6).
Файл lang_and_time_zone.php будет подключен внутри и будет отображать данные в теле файла install.php, поэтому form action=«install.php» будет просто обновлять страницу при отправки данных на сервер.
- method=«post» - в отличие от метода GET, который используется для получения данных, POST служит для отправки данных на сервер.
В файле lang_and_time_zone.php у нас будет два вида формы для наглядности
- input type=«radio» - переключатель
- select type=«text» - выпадающий список
Переключатель
Используется для примера, при добавлении большего количества переводов приложения, целесообразнее, использовать «выпадающий список».
<input type="radio" method="post" name="lang_selection" value="english" checked /> <label for="lang_english"> English</label> <br>
- input type=«radio» - переключатель
- method=«post» - в отличие от метода GET, который используется для получения данных, POST служит для отправки данных на сервер.
- id=«lang_english» - идентификатор формы
- name=«lang_selection» - имя формы
- value=«english» - принимаемое значение
- checked - определяет выбор формы переключателя (т.е. выбран по умолчанию)
- label for=«lang_english» - надпись для элимента
- br - перенос на следующую строку
Выпадающий список
Используется для выбора часового пояса работы сервера, т.е. при физически установленном сервере в Дании и использовании Приложения для русскоязычного населения, бедет отображаться время комминтариев «Московское».
<select type="text" name="timezone_selection"> <option value="Europe/Moscow">Europe/Moscow +03:00</option> <option value="Europe/Amsterdam">Europe/Amsterdam +01:00</option> <option value="Europe/Dublin">Europe/Dublin +00:00</option> <option value="Europe/Samara">Europe/Samara +04:00</option> </select>
- select type=«text» - выпадающий список
- name=«timezone_selection» - имя формы
- option value= - определитель значение пункта списка, которое будет отправлено на сервер.
Идентификатор формы, надпись для элимента и перенос на следующую строку не указываем т.к. в примере выше мы это сделали для «Чистоты кода» и на логику работы кода это не влияет (т.е. для наглядности примера, а именно: select type=«text» - определяет выпадающий список, name=«timezone_selection» - имя формы из которого данные получит переменная и option value= - значение пункта формы).
Значение пункта данной формы - это всего лишь время добавляемое к времени часового пояса места установки сервера (т.е. -2, -1, 0, +1 и т.д.) и мы могли бы это записать, но для наглядности пропишем именно обозначения «таймзон». Полный список зон можно выбрать из формы ниже:
Данная форма выбора будет рассмотрена в Приложении C этого руководства, пока же нас интересует 26 часовых поясов для выбора (от -11 до +14).
<option value="Pacific/Kiritimati">Pacific/Kiritimati +14:00</option> <option value="Pacific/Tongatapu">Pacific/Tongatapu +13:00</option> <option value="Pacific/Majuro">Pacific/Majuro +12:00</option> <option value="Pacific/Pohnpei">Pacific/Pohnpei +11:00</option> <option value="Australia/Melbourne">Australia/Melbourne +10:00</option> <option value="Asia/Tokyo">Asia/Tokyo +09:00</option> <option value="Asia/Hong_Kong">Asia/Hong_Kong +08:00</option> <option value="Asia/Bangkok">Asia/Bangkok +07:00</option> <option value="Asia/Bishkek">Asia/Bishkek +06:00</option> <option value="Indian/Maldives">Indian/Maldives +05:00</option> <option value="Asia/Dubai">Asia/Dubai +04:00</option> <option value="Europe/Moscow">Europe/Moscow +03:00</option> <option value="Europe/Helsinki">Europe/Helsinki +02:00</option> <option value="Europe/Bratislava">Europe/Bratislava +01:00</option> <option value="Europe/Dublin">Europe/Dublin +00:00</option> <option value="Atlantic/Azores">Atlantic/Azores -01:00</option> <option value="Atlantic/South_Georgia">Atlantic/South_Georgia -02:00</option> <option value="America/Sao_Paulo">America/Sao_Paulo -03:00</option> <option value="America/Montserrat">America/Montserrat -04:00</option> <option value="America/Jamaica">America/Jamaica -05:00</option> <option value="America/Regina">America/Regina -06:00</option> <option value="America/Denver">America/Denver -07:00</option> <option value="America/Vancouver">America/Vancouver -08:00</option> <option value="America/Sitka">America/Sitka -09:00</option> <option value="Pacific/Tahiti">Pacific/Tahiti -10:00</option> <option value="Pacific/Midway">Pacific/Midway -10:00</option>

Данный код приложения, это всего лишь установщик выводимого времени и нам нет смысла создавать отдельный файл timezones.php с массивом со всеми 418 часовыми зонами, т.к. установщик - это не основное приложение, а визуально понятный сборщик данных для корректной работы нашего приложения. Файл timezones.php с массивом будет описан в Приложении C этого руководства.
Кнопка
<div class = "button_lang_and_time_zone"> <input type="submit" value="Продолжить" name="button_lang_and_time_zone"> </div>
- input - интерактивный элемент управления
- type= - тип элемента для отображения
- «submit» - кнопка для отправки формы
- value= - значение элемента управления, в нашем случае это название кнопки «Продолжить»
- name=«lang_and_time_zone» - имя формы, которое отправляется вместе с данными формы

Код приведенный ниже, это всего лишь обертка нашей формы, к классу button_lang_and_time_zone позже будут подключенны стили ранее созданного (пока пустого) файла install.css в директории css.
<div class = "button_lang_and_time_zone"> </div>
Кнопку «Назад» логично расположить по левому краю формы, а кнопку «Вперед» или «Продолжить» по правому. Это мы позже и пропишем в файле install.css.
div class = «button_lang_and_time_zone» - создан нами заранее, что-бы в Главе 8.6. Файл install.css при указании стиля кнопки соблюсти последовательность написания данного руководства и нам в дальнейшем не прийдется вазвращатся в Файл lang_and_time_zone.php для «обертывания» нашей кнопки.
Логика формы
У нас имеется переключатель языков с выбранным по умолчанию Английским языком и поле выбора часовой зоны,
с Pacific/Kiritimati +14:00 по умолчанию (первая в списке выбора) и кнопка «Продолжить».
При нажатии кнопки будет проверенно условие, что выбор произведен, либо оставлен по умолчанию
(это нам понадобиться позже для того, чтобы по умолчанию программа вывела нам язык и часовую
зону сервера). Следом будет создан файл конфигурации приложения config.php и в него запишется наш
выбор в виде объявленных переменных $lang_select и $timezone_select. После этого
приложение направит нас к файлу проверки сервера server_check.php
<?php $lang_select = $_POST['lang_selection']; $timezone_select = $_POST['timezone_selection'];
- <?php - определяем начало границы выполнения кода PHP
- $lang_select = $_POST['lang_selection']; - объявляем переменную $lang_select и присваиваем ей значение с помощью глобального ассоциативного массива $_POST данные из нашей формы «Переключателя» по имени name=«lang_selection»
- $timezone_select = $_POST['timezone_selection']; - объявляем переменную $timezone_selection и присваиваем ей значение с помощью глобального ассоциативного массива $_POST данные из нашей формы «Выпадающего списка» по имени name=«timezone_selection»
Проверим что переменные lang_selection и timezone_selection определены
if(isset($_POST['lang_selection']) && isset($_POST['timezone_selection'])) {тут мы проверим, нажатие кнопки и запишем логику создания файла config.txt}
- if(...) - логический оператор условия ЕСЛИ
- isset(...) - функция определения инициализации переменной
- $_POST['lang_selection'] - глобальный ассоциативный массив $_POST с данными из нашей формы «Переключателя» по имени name=«lang_selection»
- && - логический оператор И
- $_POST['timezone_selection'] - глобальный ассоциативный массив $_POST с данными из нашей формы «Выпадающего списка» по имени name=«timezone_selection»
Проверим что кнопка button_lang_and_time_zone нажата (необходимо чтобы наш код выполнялся только по нажатию, и не выполнялся при открытии, либо перезагрузке страницы).
if(isset($_POST['button_lang_and_time_zone'])) {$bam="ИСТИНА"; echo "Кнопка нажата и переменной bam присвоенно значение = " . "$bam"; file_put_contents("config.txt","Hello World. Testing!"); echo "Файл config.txt создан и данные записаны!"; } else {$bam="ЛОЖЬ"; echo "Кнопка не нажата и переменной bam присвоенно значение = " . "$bam"; }
- if(...){...} - логический оператор условия ЕСЛИ
- isset(...) - функция определения инициализации переменной
- $_POST['button_lang_and_time_zone'] - глобальный ассоциативный массив $_POST с данными из нашей формы «Кнопка» по имени name=«button_lang_and_time_zone»
- $bam="ИСТИНА" - переменной $bam присвоили значение =«ИСТИНА»
- echo "...." - вывели текст нажатия кнопки и значение «ИСТИНА» присвоенное переменной $bam
- else(...){...} - логическая конструкция ИНАЧЕ оператора условия ЕСЛИ
- $bam="ЛОЖЬ" - переменной $bam присвоили значение =«ЛОЖЬ»
- echo "...." - вывели текст нажатия кнопки и значение «ЛОЖЬ» присвоенное переменной $bam
- file_put_contents - функция записи данных в файл запишет Hello World. Testing! в файл config.txt
Описанный выше код проверит условие:
ЕСЛИ кнопка нажата, присвоится переменной значение ИСТИНА и выведиться текст «Кнопка нажата» и значение переменной,
а так же в этой-же директории будет создан файл config.txt и в него будет записано сообщение: Hello World. Testing!,
ИНАЧЕ присвоится той же переменной значение ЛОЖЬ и выведиться текст «Кнопка не нажата» и значение переменной
Файл test_3
Создадим в директории /ucms/test/ файл test_3.php, объединим выше разобранный нами код и запишем во вновь созданный файл следующее:
- test_3.php
<!-- test_3.php --> <form action="test_3.php" method="post"> Выберите язык приложения: <br/> <input type="radio" method="post" id="lang_english" name="lang_selection" value="english" checked /> <label for="lang_english">English</label> <br> <input type="radio" method="post" name="lang_selection" value="russian"> Russian</p> Выберите часовой пояс: <br/> <select type="text" name="timezone_selection"> <option value="Pacific/Kiritimati">Pacific/Kiritimati +14:00</option> <option value="Pacific/Tongatapu">Pacific/Tongatapu +13:00</option> <option value="Pacific/Majuro">Pacific/Majuro +12:00</option> <option value="Pacific/Pohnpei">Pacific/Pohnpei +11:00</option> <option value="Australia/Melbourne">Australia/Melbourne +10:00</option> <option value="Asia/Tokyo">Asia/Tokyo +09:00</option> <option value="Asia/Hong_Kong">Asia/Hong_Kong +08:00</option> <option value="Asia/Bangkok">Asia/Bangkok +07:00</option> <option value="Asia/Bishkek">Asia/Bishkek +06:00</option> <option value="Indian/Maldives">Indian/Maldives +05:00</option> <option value="Asia/Dubai">Asia/Dubai +04:00</option> <option value="Europe/Moscow">Europe/Moscow +03:00</option> <option value="Europe/Helsinki">Europe/Helsinki +02:00</option> <option value="Europe/Bratislava">Europe/Bratislava +01:00</option> <option value="Europe/Dublin">Europe/Dublin +00:00</option> <option value="Atlantic/Azores">Atlantic/Azores -01:00</option> <option value="Atlantic/South_Georgia">Atlantic/South_Georgia -02:00</option> <option value="America/Sao_Paulo">America/Sao_Paulo -03:00</option> <option value="America/Montserrat">America/Montserrat -04:00</option> <option value="America/Jamaica">America/Jamaica -05:00</option> <option value="America/Regina">America/Regina -06:00</option> <option value="America/Denver">America/Denver -07:00</option> <option value="America/Vancouver">America/Vancouver -08:00</option> <option value="America/Sitka">America/Sitka -09:00</option> <option value="Pacific/Tahiti">Pacific/Tahiti -10:00</option> <option value="Pacific/Midway">Pacific/Midway -10:00</option> </select> <div class = "install_button"> <input type="submit" value="Продолжить" name="button_lang_and_time_zone"> </div> </form> <?php $lang_select = $_POST['lang_selection']; $timezone_select = $_POST['timezone_selection']; // Проверим что lang_selection и timezone_selection определены if(isset($_POST['lang_selection']) && isset($_POST['timezone_selection'])) { if(isset($_POST['button_lang_and_time_zone'])) {$bam="ИСТИНА"; echo "Кнопка нажата и переменной bam присвоенно значение = " . "$bam" . '<br/>'; echo "$lang_select" . '<br/>'; echo "$timezone_select" . '<br/>'; file_put_contents("config.txt","Hello World. Testing!"); echo "Файл config.txt создан и данные записаны!"; } } else {$bam="ЛОЖЬ"; echo "Кнопка не нажата и переменной bam присвоенно значение = " . "$bam" . '<br/>'; echo "$lang_select" . '<br/>'; echo "$timezone_select" . '<br/>'; } ?>
И откроем файл test_3.php в браузере для проверки работы логики приложения
Как видно в окне приложения, кнопка «Продолжить» еще не нажата, поэтому выводится сообщение: Кнопка не нажата и переменной bam присвоенно значение = ЛОЖЬ. При этом значения переменных $lang_select" и $timezone_select не выводятся, по причине не активности кнопки формы.
Не трогаем окна выбора, а просто обновим окно браузера, ничего не измениться, т.к. работает проверка нажатия кнопки. Активируем кнопку «Продолжить»: Получаем сообщение: Кнопка нажата и переменной bam присвоенно значение = ИСТИНА, а так-же значения переменных $lang_select" = english и $timezone_select = Pacific/Kiritimati указанные по умолчанию, т.е. когда переключатели мы не трогали и самое главное: в директории /ucms/test/ появился файл config.txt, а чем нас уведомило сообщение: Файл config.txt создан и данные записаны!
Проверим наш созданный файл config.txt и убеждаемся, что текст Hello World. Testing! записан.
Выбирем другой язык, а так же другой часовой пояс и нажмем кнопку Продолжить
Мы видим, что переменные $lang_select" и $timezone_select приняли другие значения. На этом проверку логики закончим.
8.4. Файл lang_and_time_zone.php
Откроем в блокноте созданный ранее в директории /ucms/library/install/ файл lang_and_time_zone.php и запишем в него код из файла test_3.php, убрав лишнее, а именно:
- вывод на экран сообщений о нажатии кнопки и присвоении переменным $lang_select" и $timezone_select
значений, а так-же вывод на экран сообщения Файл config.txt создан и данные записаны! Так-же откорректируем код в части form action=«test_3.php»
- заменим form action=«test_3.php» на form action=«install.php»
- заменим file_put_contents(«config.txt»,«Hello World. Testing!»);« на приведенный ниже код:
$file_lang_and_time_zone = '../../includes/config.php'; file_put_contents($file_lang_and_time_zone, '<?php ' . "\n", FILE_APPEND); file_put_contents($file_lang_and_time_zone, '$lang_select' . ' = ' . '"' . $lang_select . '"' . '; ' . "\n", FILE_APPEND); file_put_contents($file_lang_and_time_zone, '$timezone_select' . ' = ' . '"' . $timezone_select . '"' . '; ' . "\n", FILE_APPEND); file_put_contents($file_lang_and_time_zone, '?> ' . "\n", FILE_APPEND); header("Location: server_check.php");
- $file_lang_and_time_zone = '../../includes/config.php'; - присвоим переменной $file_lang_and_time_zone" значение, указывающее путь к директории /includes/, где будет создан файл config.php
- ../../includes/config.php - значение вновь создаваемого файла config.php в директории /includes/.
- file_put_contents - функция PHP записи в файл config.php месторасположение которого присвоенно переменной $file_lang_and_time_zone"
- <?php - записывается определение начала границы выполнения кода PHP
- \n - записывается символ перевода строки кода PHP
- , FILE_APPEND - флаг записи данных в конец файла, вместо перезаписи
- $lang_select - записывается переменная $lang_select
- = - записывается логический знак =(равно)
- $lang_select - записывается значение! переменной $lang_select присвоенное ранее из формы
То-же самое прописанно и для переменной $timezone_select
- ?> - записывается определение конца границы выполнения кода PHP
- header("Location: - перенаправление к коду файла проверки сервера server_check.php
В результате в файле config.php получим следующую запись:
<?php $lang_select = "english"; $timezone_select = "Pacific/Kiritimati"; ?>
где переменной $lang_select присвоенно значение языка по умолчанию, т.е english, а переменной $timezone_select - присвоенно значение часовой зоны Pacific/Kiritimati
- в конец нашего файла добавим следующий код «Прогресс-бара», чтобы пользователь знач, где он в данный момент находиться.
<?php <div class="progressbar"> <span style="width: 20%"></span> </div>

Код приведенный выше, это всего лишь обертка блока «Погресс-бара», который будет написан на чистом css и пока соответственно мы его не видим. Позже будут подключенны стили ранее созданного (пока пустого) файла install.css в директории css и «Погресс-бар» отобразиться.
В заключении мы добавим проверку того, что если это не первая установка, т.е. файл config.php существует в директории /includes, то окно выбора языка и часовой зоны будет пропущенно и приложение переадресует нас к выбору устанавливаемой конфигурации приложения (блог, видеохостинг и.д.), за что будет отвечать файл options.php.
Код проверки приведен ниже:
include "../../includes/cons.php"; $file_config = FOLDER . '/includes/config.php'; if (file_exists($file_config)) { /* Вызов header, перенаправит пользователя на страницу /options.php в этой же директории */ header("Location: options.php"); } else { Сюда будет записан весь наш код формы }
- include "../../includes/cons.php"; - включает и оценивает код файла cons.php из диретории /includes/ как PHP-код
- $file_config = FOLDER . '/includes/config.php'; - переменной $file_config присвоили значение /includes/config.php (местонахождения файла config.php)
- if(...){...} - логический оператор условия ЕСЛИ
- file_exists(...) - функция проверки существования указанного файла или каталога.
- header("Location: options.php") - функция перенаправления пользователя к файлу options.php.
- else{...} - логическая конструкция ИНАЧЕ оператора условия ЕСЛИ
Ниже приведен отредактированный и имеющий заключительный вид код файла lang_and_time_zone.php
- lang_and_time_zone.php
<?php include "../../includes/cons.php"; $file_config = FOLDER . '/includes/config.php'; if (file_exists($file_config)) { /* Вызов header, перенаправит пользователя на страницу /options.php в этой же директории */ header("Location: options.php"); } else { $lang_select = $_POST['lang_selection']; $timezone_select = $_POST['timezone_selection']; // Проверим что lang_selection и timezone_selection определены if(isset($_POST['lang_selection']) && isset($_POST['timezone_selection'])) { if(isset($_POST['button_lang_and_time_zone'])) { //добавляем текст и значения переменных $lang_select и timezone_select //в конец создаваемого файла config.php $filename = '../../includes/config.php'; file_put_contents($filename, '<?php ' . "\n", FILE_APPEND); file_put_contents($filename, '$lang_select' . ' = ' . '"' . $lang_select . '"' . '; ' . "\n", FILE_APPEND); file_put_contents($filename, '$timezone_select' . ' = ' . '"' . $timezone_select . '"' . '; ' . "\n", FILE_APPEND); file_put_contents($filename, '?> ' . "\n", FILE_APPEND); header("Location: server_check.php"); } } } ?> <form action="install.php" method="post"> Выберите язык приложения: <br/> <input type="radio" method="post" id="lang_english" name="lang_selection" value="english" checked /> <label for="lang_english">English</label> <br> <input type="radio" method="post" name="lang_selection" value="russian"> Russian</p> Выберите часовой пояс: <br/> <select type="text" name="timezone_selection"> <option value="Pacific/Kiritimati">Pacific/Kiritimati +14:00</option> <option value="Pacific/Tongatapu">Pacific/Tongatapu +13:00</option> <option value="Pacific/Majuro">Pacific/Majuro +12:00</option> <option value="Pacific/Pohnpei">Pacific/Pohnpei +11:00</option> <option value="Australia/Melbourne">Australia/Melbourne +10:00</option> <option value="Asia/Tokyo">Asia/Tokyo +09:00</option> <option value="Asia/Hong_Kong">Asia/Hong_Kong +08:00</option> <option value="Asia/Bangkok">Asia/Bangkok +07:00</option> <option value="Asia/Bishkek">Asia/Bishkek +06:00</option> <option value="Indian/Maldives">Indian/Maldives +05:00</option> <option value="Asia/Dubai">Asia/Dubai +04:00</option> <option value="Europe/Moscow">Europe/Moscow +03:00</option> <option value="Europe/Helsinki">Europe/Helsinki +02:00</option> <option value="Europe/Bratislava">Europe/Bratislava +01:00</option> <option value="Europe/Dublin">Europe/Dublin +00:00</option> <option value="Atlantic/Azores">Atlantic/Azores -01:00</option> <option value="Atlantic/South_Georgia">Atlantic/South_Georgia -02:00</option> <option value="America/Sao_Paulo">America/Sao_Paulo -03:00</option> <option value="America/Montserrat">America/Montserrat -04:00</option> <option value="America/Jamaica">America/Jamaica -05:00</option> <option value="America/Regina">America/Regina -06:00</option> <option value="America/Denver">America/Denver -07:00</option> <option value="America/Vancouver">America/Vancouver -08:00</option> <option value="America/Sitka">America/Sitka -09:00</option> <option value="Pacific/Tahiti">Pacific/Tahiti -10:00</option> <option value="Pacific/Midway">Pacific/Midway -10:00</option> </select> <div class = "install_button"> <input type="submit" value="Продолжить" name="button_lang_and_time_zone"> </div> </form> <div class="progressbar"> <span style="width: 20%"></span> </div>
Запишем его в тело файла lang_and_time_zone.php и откроем его в окне браузера для проверки, где после отправки формы у нас созается файл config.php с данными и браузер нас перенаправляет на страницу проверки сервера server_check.php о которой речь пойдет в следующей главе 8.5. Файл server_check.php, а пока мы получим пустое окно.
Если мы повторно в адресной строке браузера набирем путь к нашему файлу lang_and_time_zone.php, то нас приложение перенаправит на страницу выбора конфигурации установки options.php