====== 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?|}}