====== 8.5. Файл server_check.php ======
===== Введение =====
Файл server_check.php - исполнительный файл, который будет проверять наш веб-сервер, а именно:
* Версия PHP,
* Версия Apache http server,
* Наличие установленной версии системы управления базами данных MySQL,
* Модули и библиотеки PHP
* Права на чтение/запись в папки и файлы
* Отсутствие файла конфигурации
Так-же этот файл будет иметь функцию вывода информации (отображение данных файла **module_help.php**) о необходимых модулях и логику поведения
приложения при разных действиях пользователя.
==== Подготовка ====
Создадим в директории **/test** вложенную директорию **img** для хранения и вывода иконок. В
ней мы сохраним файлы иконок OK, ERROR и Refresh нашего установщика:
{{:software:development:demo:cms:ucms:good_green_ucms_creat_5.png?|загрузить иконку OK}}
, {{:software:development:demo:cms:ucms:close_red_ucms_creat_5.png?|загрузить иконку ERROR}}
, {{:software:development:demo:cms:ucms:refresh_blue_ucms_creat_5.png?|загрузить иконку Refresh}}.
Основная часть файла это перечисление, оформленное в таблице - структурированного набора данных,
состоящего из строк и столбцов, внутри которой помещен заголовок и код запросов PHP.
* **%%
Наименование модуля
%%** - основной тег HTML, определяющий начало ячейки таблицы. * **%%%%** - закрывающий тег PHP. * **%% | %%** - основной тег HTML, определяющий конец ячейки таблицы. * **%%
';
?>
* **%%%%** - начало строкового контейнера.
* **%%%%** - начало жирного выделения текста.
* **%%%%** - конструкция в PHP для вывода объектов.
* **%%$_SERVER[]%%** - встроенный массив, содержащий информацию о сервере, окружении и текущем запросе пользователя.
* **%%'SERVER_SOFTWARE'%%** - строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.
* **%%
**"Наименование модуля"** логично расположить в ячейке по левому краю формы, а контейнер **"кода запросов PHP"**
отодвинуть, задав растояние, по правому.
Это мы позже и пропишем в файле **install.css**.
echo PHP_OS;
echo $_SERVER['SERVER_SOFTWARE'];
echo PHP_VERSION;
print_r(get_loaded_extensions());
echo phpversion('curl');
echo substr(sprintf('%o', fileperms('/tmp')), -4);
* **%%PHP_OS%%** - константа вывода только названия операционной системы.
* **%%SERVER_SOFTWARE%%** - идентификатор сервера.
* **%%PHP_VERSION%%** - информация о версии PHP.
* **%%(get_loaded_extensions())%%** - возвращение массива имён скомпилированных и загруженных модулей.
* **%%phpversion('curl')%%** - возвращает версию загруженного модуля, в примере: curl
* **%%fileperms%%** — возвращает информацию о правах на файл
==== Блок логики версии PHP ====
Нами будет использоваться при написании приложения версия **PHP** не ниже **8.2**
Логический операторы условия **ЕСЛИ** (**if**) и **ИНАЧЕ** (**else**) расмотрены в предыдущей главе
[[software:development:demo:cms:ucms:creating_file_server_check|8.5. Файл server_check.php]].
В коде, приведенном ниже мы добавим тип данных с двумя возможными значениями: **true (истина)** и **false (ложь)**.
= 0) {
echo 'Версия PHP: ' . PHP_VERSION . '
';
/* Иначе выводим просьбу обновить PHP*/
} else {
echo 'Обновите версию PHP ' . '
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
?>
* **%%version_compare()%%** - сравнивает две "PHP-стандартизованные" строки с номерами версий.
Мы проверяем, что **ЕСЛИ** установленная **версия PHP** не ниже версии **8.2.0**, тогда выводим сообщение:
Версия PHP: номер установленной версии и иконку **OK** из директории **/img** c заданным размером 18x18,
**ИНАЧЕ** выводим сообщение об ошибке: Обновите версию PHP, иконку **ERROR** из директории **/img** c заданным
размером и переменной **%%$install_error%%** присваиваем значение **true (истина)**.
==== Блок логики проверки модулей PHP ====
Мы рассмотрим принцип работы кода только для одного модуля **cURL**, остальные будет прописанны по этому шаблону.
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('curl');
echo '
';
}
?>
* **%%$extensions = get_loaded_extensions();%%** - присвоим переменной **%%$extensions%%** значение
возвращения массива имён загруженных модулей.
* **%%in_array('curl', $extensions)%%** - функция выполняет поиск значения **curl** в массиве, заданном переменной **%%$extensions%%**
* **!** перед **%%in_array()%%** - означает отрицание, т.е, что не в массиве
Проверяем: **ЕСЛИ** curl **не в массиве** заданном переменной **%%$extensions%%**, тогда выводим сообщение:
Включите cURL Module:, отображается иконка **ERROR** из директории **/img** c заданным
размером и переменной **%%$install_error%%** присваиваем значение **true (истина)**, **ИНАЧЕ** выводим сообщение:
Установлено:, номер версии **curl** и иконку **OK**.
==== Блок логики проверки прав доступа ====
В этом блоке нам необходимо проверить, что директория, в которую приложение будет записывать данные,
доступна для записи. К основным относятся:
* **0600** - Доступ на запись и чтение для владельца, нет доступа для других
* **0644** - Доступ на запись и чтение для владельца, доступ на чтение для других
* **0750** - Полный доступ для владельца, доступ на чтение и выполнение для группы владельца
* **0755** - Полный доступ для владельца, доступ на чтение и выполнение для других
* **0777** - Полный доступ для всех
chmod("./includes/demo/", 0644);
';
} else {
echo '/demo недоступна для записи' . '
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
?>
* **%%$dir_includes%%** - переменная, которой присвоим значение: отображение прав доступа в виде восьмеричного числа
* **%%substr()%%** - функция, которая вырезает и возвращает подстроку из строки
* **%%sprintf()%%** - функция, которая возвращает отформатированную строку
* **%%fileperms()%%** - возвращает информацию о правах доступа на файл
Проверка: **ЕСЛИ** переменная **%%$dir_includes%%** ровняется **0775**, тогда выводим сообщение:
/demo доступна для записи и отобразим иконку **OK**. **ИНАЧЕ** выводим сообщение:
/demo недоступна для записи, отображаем иконку **ERROR** и переменной **%%$install_error%%**
присваиваем значение **true (истина)**.
==== Блок логики переменной $install_error ====
Данный блок необходим для вывода справочной информации по необходимым приложению модулям и
расширениям, отображения сообщения:Невозможно продолжить. Исправьте ошибки и Обновите страницу,
а так-же в случае успеха отобразить кнопку "Продолжить".
$install_error = true;
странице требований';
echo ' Невозможно продолжить. Исправьте ошибки и ' . ' Обновите страницу' . '
' . '
';
} else {
/* Если значение переменной $install_error значение не равно true */
/* тогда выведим кнопку Продолжить */
echo ' ';
}
?>
Проверка: **ЕСЛИ** переменной **%%$install_error%%** присвоено значение **true**, тогда выводим сообщение:
Более подробную информацию о необходимых модулях можно найти на, ссылка на страницу требований. **ИНАЧЕ**
выводим блок кнопки "Продолжить" с активацией страницы конфигурации приложения.
===== Файл test_4.php =====
В директорию добавим тестовый файл **test_4.php** и записываем в него разобранный в этой главе код вывода запросов
Server OS:
Web server:
';
?>
PHP ver. > 8.2
= 0) {
echo 'Версия PHP: ' . PHP_VERSION . '
';
/* Иначе выводим просьбу обновить PHP*/
} else {
echo 'Обновите версию PHP ' . '
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
?>
cURL Module:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('curl');
echo '
';
}
?>
Folder Permissions:
';
} else {
echo "$dir_includes" . ' - /demo недоступна для записи' . '
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
?>
странице требований';
echo ' Невозможно продолжить. Исправьте ошибки и ' . ' Обновите страницу' . '
' . '
';
} else {
/* Если значение переменной $install_error значение не равно true */
/* тогда выведим кнопку Продолжить */
echo ' ';
}
?>
Веведим в веб-браузере наш файл:
{{:software:development:demo:cms:ucms:ucms_creat_29.png?|}}
Как мы можем видеть, версия PHP у нашего сервера установлена ниже требуемой и часть модулей отключена
(не установлена). При этом для тестовой директории demo установены права - **0644**, что означает доступ на запись и чтение для владельца, доступ на чтение для других
**curl** для проверки выключен для наглядности примера
{{:software:development:demo:cms:ucms:ucms_creat_17.png?|}}
Если **curl** был включен, то система выдала бы "Установлено:,версию и иконку OK"
{{:software:development:demo:cms:ucms:ucms_creat_31.png?|}}
===== Файл server_check.php =====
Откроем в блокноте созданный ранее в директории /ucms/library/install/ файл server_check.php
и запишем в него код из файла test_4.php, предварительно, убрав лишнее, а именно:
* комментарий
Добавим в начало файла следующий код PHP:
* **%%include "tpl/tpl_install_header.php";%%** подключаем файл заголовка нашего окна
Server OS:
Web server:
';
?>
PHP ver. > 8.2
= 0) {
echo 'Версия PHP: ' . PHP_VERSION . '
';
/* Иначе выводим просьбу обновить PHP*/
} else {
echo 'Обновите версию PHP ' . '
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
?>
cURL Module:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('curl');
echo '
';
}
?>
GD Library:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('gd');
echo '
';
}
?>
SQLite3 Module:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('sqlite3');
echo '
';
}
?>
Zip Extension
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('zip');
echo '
';
}
?>
PDO Extension
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('PDO');
echo '
';
}
?>
SimpleXML Extension:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('SimpleXML');
echo '
';
}
?>
Bzip2 Function:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('bz2');
echo '
';
}
?>
Zlib Module:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('zlib');
echo '
';
}
?>
MySQLi Extension:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('mysqli');
echo '
';
}
?>
PDO_SQLITE Driver:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('pdo_sqlite');
echo '
';
}
?>
LDAP Protocol:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('ldap');
echo '
';
}
?>
OpenSSL Extension:
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
else {
echo 'Установлено: ' . phpversion('openssl');
echo '
';
}
?>
Folder Permissions:
';
} else {
echo '/includes недоступна для записи' . '
';
/* Присвоим переменной $install_error значение true */
/* т.е. ошибка установки - истина */
$install_error = true;
}
?>
странице требований';
echo ' Невозможно продолжить. Исправьте ошибки и ' . ' Обновите страницу' . '
' . '
';
} else {
/* Если значение переменной $install_error значение не равно true */
/* тогда выведим кнопку Продолжить */
echo ' ';
}
?>
Создадим в директории /ucms/library/install новый каталог для картинок и назовем его, к примеру - img, в нем мы будем хранить
файлы иконок нашего установщика. Поместим в директорию /img файлы иконок OK, ERROR и Refresh.
* {{:software:development:demo:cms:ucms:good_green_ucms_creat_5.png?|}}
* {{:software:development:demo:cms:ucms:close_red_ucms_creat_5.png?|}}
* {{:software:development:demo:cms:ucms:refresh_blue_ucms_creat_5.png?|}}
Переместим файл **config.php** в директорию **demo**. И откроем файл **server_check.php** в браузере
{{:software:development:demo:cms:ucms:ucms_creat_32.png?|}}
При нажатии на ссылку "Обновите страницу" у нас обновиться страница в этом же окне, а при нажатии на ссылку
"странице требований" откроется страница файла module_help.php в новом окне (за это отвечает **%%target="_blank"%%**), которая будет создана нами в следующей главе
[[software:development:demo:cms:ucms:creating_file_module_help|8.6. Файл module_help.php]]
{{:software:development:demo:cms:ucms:ucms_creat_33.png?|}}
Обновим PHP до версии => 8.2 на нашем сервере и установим (включим) недостоющие модули и библиотеки, и
нажмем ссылку "Обновите страницу"
{{:software:development:demo:cms:ucms:ucms_creat_34.png?|}}
Переместим назад файл **config.php** из директории **demo**. И откроем файл **server_check.php** в браузере
{{:software:development:demo:cms:ucms:ucms_creat_35.png?|}}
И через 5 сек нас перенаправит на следющее окно файла создания пользователя базы данных, который будет создан позднее.
{{:software:development:demo:cms:ucms:ucms_creat_35.png?|}}