Инструменты пользователя

Инструменты сайта


software:development:demo:cms:ucms:creating_file_server_check

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
software:development:demo:cms:ucms:creating_file_server_check [2025/04/27 21:11] vladpolskiysoftware:development:demo:cms:ucms:creating_file_server_check [2025/05/04 14:45] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
-====== 8.4. Файл server_check.php ====== +====== 8.5. Файл server_check.php ====== 
-===== Подготовка =====+===== Введение =====
 Файл server_check.php - исполнительный файл, который будет проверять наш веб-сервер, а именно: Файл server_check.php - исполнительный файл, который будет проверять наш веб-сервер, а именно:
   * Версия PHP,   * Версия PHP,
Строка 8: Строка 8:
   * Права на чтение/запись в папки и файлы   * Права на чтение/запись в папки и файлы
   * Отсутствие файла конфигурации   * Отсутствие файла конфигурации
 +Так-же этот файл будет иметь функцию вывода информации (отображение данных файла **module_help.php**) о необходимых модулях и логику поведения
 +приложения при разных действиях пользователя.
  
-Откроем наш тестовый файл **test.php** и добавим в него код вывода запросов +==== Подготовка ====
-<code php test.php> +
-<?php +
-/* Выводим имя операционной системы сервера */ +
-echo "OС сервера: " .  PHP_OS . '<br/>'; +
-/* Выводим версию веб-сервера Apache */ +
-echo "Веб - сервер: " .  $_SERVER['SERVER_SOFTWARE'] . '<br/>';+
  
 +Создадим в директории **/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.
 +<code>
 +<table>
 +    <tr>
 + <td>
 + Наименование модуля
 + </td>
 + <td>
 + <?php echo "" . PHP_OS ; ?>
 + </td>
 + </tr>
 +</table>
 +</code>
 +  * **%%<table>%%** - основной тег HTML, определяющий начало таблицы.
 +  * **%%<tr>%%** - основной тег HTML, определяющий начало строки таблицы.
 +  * **%%<td>%%** - основной тег HTML, определяющий начало ячейки таблицы.
 +  * **%%<?php%%** - открывающий тег PHP.
 +  * **%%?>%%** - закрывающий тег PHP.
 +  * **%%</td>%%** - основной тег HTML, определяющий конец ячейки таблицы.
 +  * **%%</tr>%%** - основной тег HTML, определяющий конец строки таблицы. 
 +  * **%%</table>%%** - основной закрывающий тег HTML, определяющий конец таблицы.
 +
 +<code>
 + <span class="table_block_install"><b>
 + <?php
 + /* Выводим версию веб-сервера Apache */
 + echo $_SERVER['SERVER_SOFTWARE'];
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + ?></b>
 + </span>
 +</code>
 +  * **%%<span ...>%%** - начало строкового контейнера.
 +  * **%%<b>%%** - начало жирного выделения текста.
 +  * **%%<?php%%** - открывающий тег PHP.
 +  * **%%<echo>%%** - конструкция в PHP для вывода объектов.
 +  * **%%$_SERVER[]%%** - встроенный массив, содержащий информацию о сервере, окружении и текущем запросе пользователя.
 +  * **%%'SERVER_SOFTWARE'%%** - строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.
 +  * **%%<img src=""%%** - атрибут, определяет местонахождение (URL) изображения. 
 +  * **%%alt=""%%** - атрибут тега **img** описания изображение. 
 +  * **%%width=""%%** - атрибут, определяет ширину блочных или заменяемых элементов (изображения).
 +  * **%%height=""%%** - атрибут, определяет высоту блочных или заменяемых элементов (изображения).  
 +  * **%%?>%%** - закрывающий тег PHP.
 +  * **%%</b>%%** - конец жирного выделения текста.  
 +  * **%%</span>%%** - конец строкового контейнера.
 +
 +<note blue>
 + :&11: **Пимечание:** \\   
 + Код приведенный ниже, является основным строковым контейнером для фразового контента, что по
 + своей сути, является всего лишь оберткой, к классу **table_block_install** позже будут подключенны 
 + стили ранее созданного (пока пустого) файла [[software:development:demo:cms:ucms:creating_file_install_css|install.css]] в директории **css**.
 +<code> 
 + <span class="table_block_install">
 + </span>
 +</code>
 +**"Наименование модуля"** логично расположить в ячейке по левому краю формы, а контейнер **"кода запросов PHP"** 
 +отодвинуть, задав растояние, по правому. 
 +Это мы позже и пропишем в файле **install.css**.
 +</note>
 +
 +==== Запросы ====
 +Ниже приведен основной перечень выводов запросов к серверу, который нами будет использоваться
 +для отображения информации в таблице
 +<code>
 +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);
 +</code>
 +  * **%%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 (ложь)**.
 +<code>
 +<?php
 /* Выводим версию установленного PHP */ /* Выводим версию установленного PHP */
 /* Проверим, что версия установленного PHP не ниже 8.2 */ /* Проверим, что версия установленного PHP не ниже 8.2 */
 if (version_compare(PHP_VERSION, '8.2.0') >= 0) { if (version_compare(PHP_VERSION, '8.2.0') >= 0) {
-    echo 'Версия PHP не ниже версии 8.2: ' . PHP_VERSION . " OK" . "\n. '<br/>'; + echo 'Версия PHP: ' . PHP_VERSION . '<img src="img/good_green_ucms_creat_5.pngalt="good_green" width="18" height="18">'; 
- /* Иначе выводим просьбу обновить PHP*/ + /* Иначе выводим просьбу обновить PHP*/ 
- } else { + } else { 
- echo "Обновите версию PHP"; + echo 'Обновите версию PHP ' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">'; 
- + /* Присвоим переменной $install_error значение true */ 
-/* Проверим включен ли модуль  pgsql Module, cURL Module, GD Library,  + /* т.е. ошибка установки - истина */ 
-ZipArchive, SimpleXML Module, PDO bz2 zlib sqlite3 zip mysqli*/+ $install_error = true
 + } 
 +?> 
 +</code> 
 + 
 +  * **%%version_compare()%%** - сравнивает две "PHP-стандартизованные" строки с номерами версий. 
 +   
 +Мы проверяем, что **ЕСЛИ** установленная **версия PHP** не ниже версии **8.2.0**, тогда выводим сообщение: 
 +Версия PHP: номер установленной версии и иконку **OK** из директории **/img** c заданным размером 18x18, 
 +**ИНАЧЕ** выводим сообщение об ошибке: Обновите версию PHP, иконку **ERROR** из директории **/img** c заданным  
 +размером и переменной **%%$install_error%%** присваиваем значение **true (истина)**. 
 + 
 +==== Блок логики проверки модулей PHP ==== 
 +Мы рассмотрим принцип работы кода только для одного модуля **cURL**, остальные будет прописанны по этому шаблону. 
 + 
 +<code> 
 +<?php 
 +/* Проверим включен ли модуль cURL Module*/
 $extensions = get_loaded_extensions(); $extensions = get_loaded_extensions();
 + if (!in_array('curl', $extensions)) {
 + /* Когда cURL Module у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo "Включите cURL Module:";
 + echo '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('curl');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 +?>
 +</code>
 +  * **%%$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**.
  
-if (!in_array('pgsql', $extensions)) { +==== Блок логики проверки прав доступа ==== 
-    exit('Модуль "pgsql" не включен!'); +В этом блоке нам необходимо проверить, что директория, в которую приложение будет записывать данные,  
-+доступна для записи. К основным относятся: 
-else { +  * **0600** - Доступ на запись и чтение для владельца, нет доступа для других 
-    echo 'Текущая версия pgsql: ' . phpversion('pgsql') . '<br/>'; +  * **0644** - Доступ на запись и чтение для владельца, доступ на чтение для других 
-+  * **0750** - Полный доступ для владельца, доступ на чтение и выполнение для группы владельца 
-if (!in_array('curl'$extensions)) { +  * **0755** - Полный доступ для владельца, доступ на чтение и выполнение для других 
-/* Так как cURL Module у нас выключен,  +  * **0777** - Полный доступ для всех 
-выводиться сообщение о невозможности продолжить, +   
-появляется ссылка кнопка на эту же страницу "Обновить"  +<note blue> 
-и происходит остановка */ + :&11: **Пимечание:** \\    
-    echo ' Невозможно продолжить. Исправьте ошибки и попробуйте еще раз' . '<a href="./test.php"> Обновить</a>' . '<br/>'; +Права доступа для проверки кода можно изменить командой 
- exit('Модуль "curl" не включен!'); +<code> 
-} +chmod("./includes/demo/", 0644); 
-else { +</code
-    echo 'Текущая версия curl: ' . phpversion('curl''<br/>'; +</note>
-}+
  
 +Рассмотрим блок проверки прав доступа  
 +  
 +<code>
 +<?php
 /* Проверим разрешения для папок */ /* Проверим разрешения для папок */
-//0600 // Доступ на запись и чтение для владельца, нет доступа для других +$dir_includes = substr(sprintf('%o', fileperms('../includes/demo')), -4); 
-//0644 // Доступ на запись и чтение для владельца, доступ на чтение для других +if ($dir_includes == '0775') { 
-//0750 // Полный доступ для владельца, доступ на чтение и выполнение для группы владельца + echo '/demo доступна для записи'; 
-//0755 // Полный доступ для владельцадоступ на чтение и выполнение для других + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">'; 
-//0777 // Полный доступ для всех + } else { 
-// Установим доступ на запись и чтение для владельца, доступ на чтение  + echo '/demo  недоступна для записи' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">'; 
-// для других для директории demo + /* Присвоим переменной $install_error значение true */ 
-//chmod("./includes/demo/", 0644)+ /* т.е. ошибка установки - истина */ 
-echo substr(sprintf('%o', fileperms('./includes')), -4) . '<br/>'; + $install_error = true; 
-echo substr(sprintf('%o', fileperms('./includes/demo')), -4) . '<br/>';+
 +?> 
 +</code> 
 +  * **%%$dir_includes%%** - переменнаякоторой присвоим значениеотображение прав доступа в виде восьмеричного числа 
 +  * **%%substr()%%** - функция, которая вырезает и возвращает подстроку из строки  
 +  * **%%sprintf()%%** - функция, которая возвращает отформатированную строку  
 +  * **%%fileperms()%%** - возвращает информацию о правах доступа на файл 
 +   
 +Проверка: **ЕСЛИ** переменная **%%$dir_includes%%** ровняется **0775**, тогда выводим сообщение: 
 +/demo доступна для записи и отобразим иконку **OK**. **ИНАЧЕ** выводим сообщение: 
 +/demo  недоступна для записи, отображаем иконку **ERROR** и переменной **%%$install_error%%**  
 +присваиваем значение **true (истина)**.
  
 +==== Блок логики переменной  $install_error ====
  
-$dir_demo = substr(sprintf('%o'fileperms('./includes/demo')), -4); +Данный блок необходим для вывода справочной информации по необходимым приложению модулям и 
-if ($dir_demo == '0755') { +расширениям, отображения сообщения:Невозможно продолжить. Исправьте ошибки и Обновите страницу,  
-    echo 'Директория /demo доступна для записи' . '<br/>';+а так-же в случае успеха отобразить кнопку "Продолжить"
 + 
 +<note blue> 
 + :&11: **Пимечание:** \\    
 +В блоках кода проверки выше, мы в случае ошибки присваивали переменной **%%$install_error%%** значение **true** 
 +<code> 
 +$install_error = true; 
 +</code> 
 +</note> 
 + 
 +<code> 
 +<?php 
 +// Если переменная $install_error хотя бы раз приняла  
 +// значение trueто выведим сообщение  
 +//Более подробную информацию о необходимых модулях можно найти на странице требований. 
 +//Невозможно продолжить. Исправьте ошибки и попробуйте еще раз. Обновить 
 +if ($install_error == true) { 
 +echo 'Более подробную информацию о необходимых модулях можно найти на ' . '<a href="./test_99.php" target="_blank">странице требований</a>'; 
 +echo '<p style="color: red"> Невозможно продолжить. Исправьте ошибки и ' . '<a href="./test_4.php"> Обновите страницу</a>' . '</p>' . '<br/>';
 } else { } else {
-    echo 'Директория /demo  недоступна для записи' . '<br/>'; + /* Если значение переменной $install_error значение не равно true */ 
-+ /* тогда выведим кнопку Продолжить */ 
-$dir_includes = substr(sprintf('%o', fileperms('./includes')), -4); + echo ' <div class = "install_button"> 
-if ($dir_includes == '0775') { + <form action="database_options.php"> 
-    echo 'Директория /includes доступна для записи';+ <input type="submit" value="Продолжить" name="button"> 
 + </form> 
 + </div>'; 
 +  }  
 +?> 
 +</code> 
 + 
 + 
 +Проверка: **ЕСЛИ** переменной **%%$install_error%%** присвоено значение **true**, тогда выводим сообщение: 
 +Более подробную информацию о необходимых модулях можно найти на, ссылка на страницу требований. **ИНАЧЕ**  
 +выводим блок кнопки "Продолжить" с активацией страницы конфигурации приложения. 
 + 
 +===== Файл  test_4.php ===== 
 +В директорию добавим тестовый файл **test_4.php** и записываем в него разобранный в этой главе код вывода запросов 
 +<code php test_4.php> 
 +<!--  test_4.php  --> 
 + 
 +<table> 
 +    <tr> 
 + <td> 
 + Server OS: 
 + </td> 
 + <td> 
 + <span class="table_block_install"><b> 
 + <?php 
 + /* Выводим имя операционной системы сервера */ 
 + echo PHP_OS; 
 + ?></b> 
 + </span> 
 + </td> 
 + </tr> 
 + <tr> 
 + <td> 
 + Web server: 
 + </td> 
 + <td> 
 + <span class="table_block_install"><b> 
 + <?php 
 + /* Выводим версию веб-сервера Apache */ 
 + echo $_SERVER['SERVER_SOFTWARE']; 
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">'; 
 + ?></b> 
 + </span> 
 + </td> 
 + </tr> 
 + <tr> 
 + <td> 
 + PHP ver. > 8.2 
 + </td> 
 + <td> 
 + <span class="table_block_install"><b> 
 + <?php 
 + /* Выводим версию установленного PHP */ 
 + /* Проверим, что версия установленного PHP не ниже 8.2 */ 
 + if (version_compare(PHP_VERSION, '8.2.0') >= 0) { 
 + echo 'Версия PHP: ' . PHP_VERSION . '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">'; 
 + /* Иначе выводим просьбу обновить PHP*/ 
 + } else { 
 + echo 'Обновите версию PHP ' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">'; 
 + /* Присвоим переменной $install_error значение true */ 
 + /* т.е. ошибка установки - истина */ 
 + $install_error = true; 
 +
 + ?></b> 
 + </span> 
 + </td> 
 + </tr> 
 +    <tr> 
 + <td> 
 + cURL Module: 
 + </td> 
 + <td> 
 + <span class="table_block_install"><b> 
 + <?php 
 + /* Проверим включен ли модуль  pgsql Module,  
 + SimpleXML Module, PDO bz2 zlib sqlite3 zip mysqli*/ 
 + $extensions = get_loaded_extensions(); 
 + if (!in_array('curl', $extensions)) { 
 + /* Когда cURL Module у нас выключен,  
 + выводиться сообщение о невозможности продолжить, 
 + появляется ссылка кнопка на эту же страницу "Обновить"*/ 
 + echo "Включите cURL Module:"; 
 + echo '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">'; 
 + /* Присвоим переменной $install_error значение true */ 
 + /* т.е. ошибка установки - истина */ 
 + $install_error = true; 
 +
 + else { 
 + echo 'Установлено: ' . phpversion('curl'); 
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">'; 
 +
 + ?></b> 
 + </span> 
 + </td> 
 + </tr>  
 +    <tr> 
 + <td> 
 + Folder Permissions: 
 + </td> 
 + <td> 
 + <span class="table_block_install"><b> 
 + <?php 
 + /* Проверим разрешения для папок */ 
 + $dir_includes = substr(sprintf('%o', fileperms('../includes/demo')), -4); 
 + if ($dir_includes == '0775') { 
 + echo "$dir_includes"'/demo доступна для записи'; 
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">'; 
 + } else { 
 + echo "$dir_includes" . ' - /demo  недоступна для записи' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">'; 
 + /* Присвоим переменной $install_error значение true */ 
 + /* т.е. ошибка установки - истина */ 
 + $install_error = true; 
 +
 + ?></b> 
 + </span> 
 + </td> 
 + </tr>  
 +</table> 
 +<?php 
 +// Если переменная $install_error хотя бы раз приняла  
 +// значение true, то выведим сообщение  
 +//Более подробную информацию о необходимых модулях можно найти на странице требований. 
 +//Невозможно продолжить. Исправьте ошибки и попробуйте еще раз. Обновить 
 +if ($install_error == true) { 
 +echo 'Более подробную информацию о необходимых модулях можно найти на ' . '<a href="./test_99.php" target="_blank">странице требований</a>'; 
 +echo '<p style="color: red"> Невозможно продолжить. Исправьте ошибки и ' . '<a href="./test_4.php"> Обновите страницу</a>' . '</p>' . '<br/>';
 } else { } else {
-    echo 'Директория /includes  недоступна для записи'; + /* Если значение переменной $install_error значение не равно true */ 
-}+ /* тогда выведим кнопку Продолжить */ 
 + echo ' <div class = "install_button"> 
 + <form action="database_options.php"> 
 + <input type="submit" value="Продолжить" name="button"> 
 + </form> 
 + </div>'; 
 +  
 ?> ?>
 </code>  </code> 
 +
 +Веведим в веб-браузере наш файл:
 +
 +{{:software:development:demo:cms:ucms:ucms_creat_29.png?|}}
 +
 +Как мы можем видеть, версия PHP у нашего сервера установлена ниже требуемой и часть модулей отключена 
 +(не установлена). При этом для тестовой директории demo установены права - **0644**, что означает доступ на запись и чтение для владельца, доступ на чтение для других
  
 **curl** для проверки выключен для наглядности примера **curl** для проверки выключен для наглядности примера
Строка 80: Строка 379:
 {{:software:development:demo:cms:ucms:ucms_creat_17.png?|}} {{:software:development:demo:cms:ucms:ucms_creat_17.png?|}}
  
-Если **curl** был включен, то система выдала бы "Текущая версия curlи версию"+Если **curl** был включен, то система выдала бы "Установлено:,версию и иконку OK"
  
-{{:software:development:demo:cms:ucms:ucms_creat_16.png?|}}+{{:software:development:demo:cms:ucms:ucms_creat_31.png?|}}
  
-Далее при проверке **Модуля curl** происходит остановка проверки. 
  
-При влюченном **Модуле curl** система проходит код до конца нашего файла 
-Откроем файл **test.php** в веб - браузере 
- 
-{{:software:development:demo:cms:ucms:ucms_creat_18.png?|}} 
  
 ===== Файл server_check.php ===== ===== Файл server_check.php =====
-Перенесем наш рабочий код в ранее созданный файл **server_check.php**+ 
 +Откроем в блокноте созданный ранее в директории /ucms/library/install/ файл server_check.php 
 +и запишем в него код из файла test_4.php, предварительно, убрав лишнееа именно: 
 + 
 +  * комментарий <!--  test_4.php  --> 
 + 
 +Добавим в начало файла следующий код PHP: 
 <code php server_check.php> <code php server_check.php>
 +<?php
 +include "tpl/tpl_install_header.php";
 +/* Подключем файл cons.php из директории includes*/
 +include "../../includes/cons.php";
 +/* Объявим в переменной $file_config путь к файлу config.php
 +для файла./ucms/library/install/server_check.php
 +и проверим его наличие */
 +$file_config = FOLDER . '/includes/config.php';
 +/* Если файл config.php в директории /includes существует,
 +приложение переведет на страницу выбора конфигурации
 +./ucms/library/install/database_options.php, которая пока у нас не создана*/
 +if (file_exists($file_config)) {
 + /* Вызов header, с задержкой 5 сек перенаправит на страницу
 + ./ucms/library/install/database_options.php */
 +    header('Refresh: 5; URL = database_options.php');
 +    echo "Обнаружена установленная версия приложения!";
 + echo "Можно установить дополненительную конфигурацию приложения!";
 +    exit();
 +}
 +?>
 +</code>
  
 +  * **%%include "tpl/tpl_install_header.php";%%** подключаем файл заголовка нашего окна
 +
 +<note blue>
 + :&11: **Пимечание:** \\   
 +Файл **%%tpl_install_header.php%%** в директории **/tpl** будет создан позднее в главе 
 +[[software:development:demo:cms:ucms:creating_file_install_css|8.7. Файл install.css]] и
 +сейчас подключается, чтобы в будущем не возвращаться к этой главе.
 +</note>
 +
 +  * **%%include "../../includes/cons.php";%%** подключем файл с константами **cons.php** из директории **includes**
 +  * **%%$file_config = FOLDER . '/includes/config.php';%%** задаем переменной **%%$file_config%%** в значение файл **config.php** в директории **includes**
 +  * **%%header('Refresh: 5; URL = database_options.php');%%** с задержкой 5 сек перенаправляем пользователя на страницу выбора установки конфигурации **database_options.php**
 +
 +Проверка: **ЕСЛИ** файл **%%$file_config%%** тогда вызов header, с задержкой 5 сек перенаправит на страницу
 +./ucms/library/install/database_options.php с выводим сообщений:
 +Обнаружена установленная версия приложения!\\
 +Можно установить дополненительную конфигурацию приложения!
 +**ИНАЧЕ** будет выведена таблица проверки сервера.
 +
 +Далее для необходимых нам модулей по шаблону кода из файла test_4.php, прописываем логику проверки в талице,
 +заменив путь к проверяемой директории с **/demo** на **../../includes**. Модули для проверки могут отличаться, в зависимости от цели создаваемого приложения,
 +в нашем случае это:
 +
 +  * **Bzip2 Function** - используются для прозрачного чтения и записи сжатых файлов bzip2 (.bz2).
 +  * **cURL Module** - позволяет подключаться и взаимодействовать со многими различными типами серверов с помощью многих различных типов протоколов (http, https, ftp, gopher, telnet, dict, file и ldap).
 +  * **GD Library** - позволяет использовать функции изображений, включая создание и обработку файлов изображений в различных форматах, включая GIF , PNG , JPEG , WBMP и XPM.
 +  * **DOM Extension** - позволяет выполнять операции с документами XML и HTML через API DOM с PHP.
 +  * **LDAP Protocol** - облегченный протокол доступа к каталогам, который используется для доступа к «серверам каталогов».
 +  * **MySQLi Extension** - позволяет получить доступ к функциональным возможностям MySQL 4.1 и выше.
 +  * **OpenSSL Extension** - используются для симметричного и асимметричного шифрования и дешифрования, PBKDF2, PKCS7, PKCS12, X509 и других криптоопераций.
 +  * **PDO Extension** - определяет легкий, последовательный интерфейс для доступа к базам данных в PHP.
 +  * **PDO_SQLITE Driver** - драйвер, реализующий интерфейс PHP Data Objects (PDO) для обеспечения доступа к базам данных SQLite 3.
 +  * **SimpleXML Extension** - предоставляет очень простой и удобный набор инструментов для преобразования XML в объект, который можно обрабатывать с помощью обычных селекторов свойств и итераторов массивов.
 +  * **SQLite3 Module** - поддержка баз данных SQLite версии 3.
 +  * **Zip Extension** - позволяет прозрачно читать или записывать сжатые ZIP-архивы и файлы внутри них.
 +  * **Zlib Module** - позволяет прозрачно читать и записывать сжатые gzip (.gz) файлы с помощью версий большинства функций файловой системы , которые работают с файлами, сжатыми gzip
 +
 +В конец нашего файла добавим следующий код "Прогресс-бара", чтобы пользователь знач, где он в данный момент находиться.
 +
 +<code>
 +<?php 
 +<div class="progressbar">
 +  <span style="width: 40%"></span>
 +</div> 
 +</code> 
 +
 +<note blue>
 + :&11: **Пимечание:** \\   
 + Код приведенный выше, это всего лишь обертка блока "Погресс-бара", который будет написан на чистом 
 +css и пока соответственно мы его не видим. Позже будут подключенны стили ранее созданного (пока пустого) файла
 +[[software:development:demo:cms:ucms:creating_file_install_css|install.css]] в директории **css** и "Погресс-бар" отобразиться.
 +</note>
 +
 +И в заключение добавим "подвал" нашего окна
 +  * **%%include "tpl/tpl_install_footer.php";%%** подключаем файл "подвала" нашего окна
 +
 +<note blue>
 + :&11: **Пимечание:** \\   
 +Файл **%%tpl_install_footer.php%%** в директории **/tpl** будет создан позднее в главе 
 +[[software:development:demo:cms:ucms:creating_file_install_css|8.7. Файл install.css]] и
 +сейчас подключается, чтобы в будущем не возвращаться к этой главе.
 +</note>
 +
 +Оформив правки и собрав воедино все описанное в данной главе записываем в файл **server_check.php**
 +готовый код
 +
 +<code php server_check.php>
 +<?php
 +include "tpl/tpl_install_header.php";
 +/* Подключем файл cons.php из директории includes*/
 +include "../../includes/cons.php";
 +/* Объявим в переменной $file_config путь к файлу config.php
 +для файла./ucms/library/install/server_check.php
 +и проверим его наличие */
 +$file_config = FOLDER . '/includes/config.php';
 +/* Если файл config.php в директории /includes существует,
 +приложение переведет на страницу выбора конфигурации
 +./ucms/library/install/database_options.php, которая пока у нас не создана*/
 +if (file_exists($file_config)) {
 + /* Вызов header, с задержкой 5 сек перенаправит на страницу
 + ./ucms/library/install/database_options.php */
 +    header('Refresh: 5; URL = database_options.php');
 +    echo "Обнаружена установленная версия приложения!";
 + echo "Можно установить дополненительную конфигурацию приложения!";
 +    exit();
 +}
 +?>
 +<table>
 +    <tr>
 + <td>
 + Server OS:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Выводим имя операционной системы сервера */
 + echo "" . PHP_OS ;
 + ?></b>
 + </span>
 + </td>
 + </tr>
 + <tr>
 + <td>
 + Web server:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Выводим версию веб-сервера Apache */
 + echo $_SERVER['SERVER_SOFTWARE'];
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + ?></b>
 + </span>
 + </td>
 + </tr>
 + <tr>
 + <td>
 + PHP ver. > 8.2
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Выводим версию установленного PHP */
 + /* Проверим, что версия установленного PHP не ниже 8.2 */
 + if (version_compare(PHP_VERSION, '8.2.0') >= 0) {
 + echo 'Версия PHP: ' . PHP_VERSION . '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + /* Иначе выводим просьбу обновить PHP*/
 + } else {
 + echo 'Обновите версию PHP ' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + cURL Module:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли модуль  pgsql Module, 
 + SimpleXML Module, PDO bz2 zlib sqlite3 zip mysqli*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('curl', $extensions)) {
 + /* Когда cURL Module у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo "Включите cURL Module:";
 + echo '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('curl');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + GD Library:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли модуль  GD Library*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('gd', $extensions)) {
 + /* Когда GD Library Module у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo "Включите GD Library Module:";
 + echo '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('gd');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + SQLite3 Module:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли модуль  sqlite3*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('sqlite3', $extensions)) {
 + /* Когда sqlite3 Module у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите sqlite3 Module' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('sqlite3');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + Zip Extension
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли модуль  ZipArchive*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('zip', $extensions)) {
 + /* Когда Zip Extension у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите Zip Extension' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('zip');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + PDO Extension
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли PDO Extension*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('PDO', $extensions)) {
 + /* Когда PDO Module у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите PDO Extension' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('PDO');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + SimpleXML Extension:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли модуль  SimpleXML Extension*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('SimpleXML', $extensions)) {
 + /* Когда SimpleXML Extension у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите SimpleXML Extension' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('SimpleXML');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + Bzip2 Function:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли модуль  Bzip2 Function*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('bz2', $extensions)) {
 + /* Когда Bzip2 Function у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите Bzip2 Function' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('bz2');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + Zlib Module:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли модуль  Zlib Module*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('zlib', $extensions)) {
 + /* Когда Zlib Module у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите Zlib Module' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('zlib');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + MySQLi Extension:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли MySQLi Extension*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('mysqli', $extensions)) {
 + /* Когда MySQLi Extension у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите MySQLi Extension' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('mysqli');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + PDO_SQLITE Driver:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли PDO_SQLITE Driver*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('pdo_sqlite', $extensions)) {
 + /* Когда PDO_SQLITE Driver у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите PDO_SQLITE Driver' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('pdo_sqlite');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + LDAP Protocol:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли LDAP Protocol*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('ldap', $extensions)) {
 + /* Когда LDAP Protocol у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите LDAP Protocol' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('ldap');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + OpenSSL Extension:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим включен ли OpenSSL Extension*/
 + $extensions = get_loaded_extensions();
 + if (!in_array('openssl', $extensions)) {
 + /* Когда OpenSSL Extension у нас выключен, 
 + выводиться сообщение о невозможности продолжить,
 + появляется ссылка кнопка на эту же страницу "Обновить"*/
 + echo 'Включите OpenSSL Extension' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + else {
 + echo 'Установлено: ' . phpversion('openssl');
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +    <tr>
 + <td>
 + Folder Permissions:
 + </td>
 + <td>
 + <span class="table_block_install"><b>
 + <?php
 + /* Проверим разрешения для папок */ 
 + $dir_includes = substr(sprintf('%o', fileperms('../../includes')), -4);
 + if ($dir_includes == '0775') {
 + echo '/includes доступна для записи';
 + echo '<img src="img/good_green_ucms_creat_5.png" alt="good_green" width="18" height="18">';
 + } else {
 + echo '/includes  недоступна для записи' . '<img src="img/close_red_ucms_creat_5.png" alt="close_red" width="18" height="18">';
 + /* Присвоим переменной $install_error значение true */
 + /* т.е. ошибка установки - истина */
 + $install_error = true;
 + }
 + ?></b>
 + </span>
 + </td>
 + </tr>
 +</table>
 +<?php
 +// Если переменная $install_error хотя бы раз приняла 
 +// значение true, то выведим сообщение 
 +//Более подробную информацию о необходимых модулях можно найти на странице требований.
 +//Невозможно продолжить. Исправьте ошибки и попробуйте еще раз. Обновить
 +if ($install_error == true) {
 +echo 'Более подробную информацию о необходимых модулях можно найти на ' . '<a href="./module_help.php" target="_blank">странице требований</a>';
 +echo '<p style="color: red"> Невозможно продолжить. Исправьте ошибки и ' . '<a href="./server_check.php"> Обновите страницу</a>' . '</p>' . '<br/>';
 +} else {
 + /* Если значение переменной $install_error значение не равно true */
 + /* тогда выведим кнопку Продолжить */
 + echo ' <div class = "install_button">
 + <form action="options.php">
 + <input type="submit" value="Продолжить" name="button">
 + </form>
 + </div>';
 +  } 
 +?>
 +
 +<div class="progressbar">
 +  <span style="width: 40%"></span>
 +</div>
 +<?php
 +include "tpl/tpl_install_footer.php";
 +?>
 </code> </code>
 +
 +Создадим в директории /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?|}}
 +
 <note blue> <note blue>
-<wrap left>← [[software:development:demo:cms:ucms:creating_file_config|8.3. Файл config.php]]</wrap>  +<wrap left>← [[software:development:demo:cms:ucms:creating_file_lang_and_time_zone|8.4. Файл lang_and_time_zone.php]]</wrap>  
-<wrap right>[[software:development:demo:cms:ucms:creating_install|8.5Файл install.php]] →</wrap>+<wrap right>[[software:development:demo:cms:ucms:creating_file_module_help|8.6module_help.php]] →</wrap>
 </note> </note>
software/development/demo/cms/ucms/creating_file_server_check.1745777512.txt.gz · Последнее изменение: vladpolskiy