Apache 2.4, MySQL 8.0, PHP 8, phpMyAdmint

Подходит и для обычных(не виртуальных) ОС семейства Windows.

Все программы, входящие в типичную установку веб-сервера, являются бесплатными, у всех у них открыт исходный код. Локальный веб-сервер потребляет минимум ресурсов и, на самом деле, его совсем нетрудно установить и настроить.

Эта инструкция о том, как установить локальный веб-сервер без использования готовых сборок. Этот способ имеет свои преимущества. Самыми важными из них являются: полный контроль на тем, что вы устанавливаете; возможность использовать самые последние версии программного обеспечения.

Подготовка (скачивание программ, входящих в сервер, создание структуры сервера). примечание: Официальный сайт разработчиков Apache это httpd.apache.org. Можно скачать Apache с этого сайта. Но официальная версия собирается с использованием старого компилятора, по этой причине она не работает с новыми версиями PHP. Авторы PHP рекомендуют Apache с сайта apachelounge.com/download. Поэтому для этой инструкции скачиваем Apache именно с сайта apachelounge.com/download.

Скачиваем


  1. Apache (непосредственно веб-сервер)
  2. PHP — среда для работы PHP программ
  3. MySQL — система управления базами данных
  4. phpMyAdmin — инструмент для управления базами данных

Если у вас 64-битная версия Windows, то вы можете выбрать как 64-битную, так и 32-битную версию компонентов. Главное правило — все компоненты должны быть одной битности. Если у вас 32-битная версия Windows, то все компоненты должны быть 32-битными. Это не относится к phpMyAdmin, который написан на языке PHP. Для PHP программ понятие битности неприменимо.

PHP 8 скачайте со страницы //windows.php.net/download/. Выберите версию Thread Safe, обратите внимание на битность.

Бесплатная версия MySQL называется MySQL Community Server. Её можно скачать на странице //dev.mysql.com/downloads/mysql/. На этой же странице есть установщик в виде исполнимого файла, но я рекомендую скачать ZIP-архив. На странице скачивания нам предлагают зарегистрироваться или войти в существующую учётную запись — но это делать необязательно. Достаточно нажать на ссылку «No thanks, just start my download». Обратите внимание на битность.

Сайт для скачивания phpMyAdmin phpmyadmin.net.


Ещё нам нужен файл Visual C++ Redistributable for Visual Studio 2015-2019, т.е. Распространяемый компонент Visual C++ для Visual Studio 2015-2019 (или любой другой более поздний), скачать его можно на официальном сайте Microsoft по ссылке:

прямая ссылка на скачивание 64-битной версии; прямая ссылка на скачивание 32-битной версии;

Установка

Установите файл VC_redist.x64.exe

Создание структуры веб-сервера

примечание: Создадим структуру каталогов нашего сервера. Главная идея — разделить исполнимые файлы и файлы сайтов с базами данных. Это удобно для обслуживания сервера, в том числе для резервного копирования.

В корне диска C:\ создайте каталог Server

В этом каталоге создайте 2 подкаталога: bin (для исполнимых файлов) и data

C:\

C:\Server

C:\Server\bin

C:\Server\data

Перейдите в каталог data и там создайте подпапки DB (для баз данных) и htdocs (для сайтов).

C:\Server\data

C:\Server\data\DB

C:\Server\data\htdocs

Перейдите в каталог C:\Server\data\DB\ и создайте там пустую папку data.

C:\Server\data\DB

C:\Server\data\DB\data


Установка Apache 2.4


Содержимое загруженного архива (точнее, только каталог Apache24), распакуйте в

C:\Server\bin

Apache24 —> C:\Server\bin

C:\Server\bin\Apache24

Перейдите в каталог C:\Server\bin\Apache24\conf\ и октройте файл httpd.conf любым текстовым редактором.

C:\Server\bin\Apache24\conf\httpd.conf

В нём изменяем ряд строк.

Изменяем:

  1. Define SRVROOT "c:/Apache24"

    на—>

    Define SRVROOT "c:/Server/bin/Apache24"

  2. #ServerName www.example.com:80

    на—>

    ServerName localhost

  3. DocumentRoot "${SRVROOT}/htdocs"

    на—>

    DocumentRoot "c:/Server/data/htdocs"

  4. на—>

  5. DirectoryIndex index.html

    на—>

    DirectoryIndex index.php index.html index.htm

  6. #AllowOverride controls what directives may be placed in .htaccess files.
    #It can be "All", "None", or any combination of the keywords:
    #AllowOverride FileInfo AuthConfig Limit
    #AllowOverride None

    на—>

    #AllowOverride controls what directives may be placed in .htaccess files.
    #It can be "All", "None", or any combination of the keywords:
    #AllowOverride FileInfo AuthConfig Limit
    AllowOverride All

  7. #LoadModule rewrite_module modules/mod_rewrite.so

    на—>

    LoadModule rewrite_module modules/mod_rewrite.so

Сохраняем и закрываем файл. Всё, настройка Apache завершена!

Откройте командную строку (Win+X). Выберите там Командная строка (администратор) или Windows PowerShell (администратор) и скопируйте туда:

c:\Server\bin\Apache24\bin\httpd.exe -k install

Нажмите ENTER

Затем скопируйте туда:

c:\Server\bin\Apache24\bin\httpd.exe -k start

Нажмите ENTER

Теперь в браузере набираем http://localhost/ и видим следующее:

Apache работает

Для удобства дальнейшей работы с сервером переходим по адресу

C:\Server\bin\Apache24\bin\ApacheMonitor.exe

и запускаем ApacheMonitor.exe (+ создаем ярлык и помещаем в автозагрузку Windows)

Установка и настройка MySQL 8.0


В каталог bin C:\Server\bin\ распаковываем файлы MySQL (из архива mysql-8.0.23-winx64.zip).

Переименовываем папку mysql-8.0.23-winx64 в mysql-8.0 (для краткости).

Заходим в эту папку (C:\Server\bin\mysql-8.0\) и создаём там файл my.ini

Теперь открываем этот файл (my.ini) любым текстовым редактором.

Добавяем туда следующие строки:

[mysqld]

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir="c:/Server/data/DB/data/"
default_authentication_plugin=mysql_native_password


Сохраняем и закрываем его.

Настройка завершена, но нужно ещё выполнить инициализацию и установку, для этого открываем командную строку от имени администратора и последовательно вводим туда:

C:\Server\bin\mysql-8.0\bin\mysqld --initialize-insecure --user=root
C:\Server\bin\mysql-8.0\bin\mysqld --install
net start mysql

По окончанию этого процесса в каталоге C:\Server\data\DB\data\ должны появиться автоматически сгенерированные файлы:

C:\Server\data\DB\data\

Теперь служба MySQL будет запускаться при каждом запуске Windows.


Установка и настройка PHP 8

В папке C:\Server\bin создаём каталог PHP и копируем в него содержимое архива php-8.0.2-Win32-vs16-x64.zip.

C:\Server\bin\PHP

Перейдите в каталог C:\Server\bin\Apache24\conf\ и октройте файл httpd.conf любым текстовым редактором.

В самый конец добавляем строчки

PHPIniDir "C:/Server/bin/PHP"
AddHandler application/x-httpd-php .php
LoadModule php_module "C:/Server/bin/php/php8apache2_4.dll"


Перезапускаем Apache через запущенный монитор Apache или через командную строку:

c:\Server\bin\Apache24\bin\httpd.exe -k restart

В каталоге c:\Server\data\htdocs\ создаём файл с названием info.php

C:\Server\data\htdocs\info.php

Копируем в этот файл:

phpinfo ();

В браузере откройте ссылку http://localhost/info.php. Если вы видите тоже самое, что на картинке, значит PHP работает:

Настройка PHP 8


Настройка PHP происходит в файле php.ini. В zip-архивах, предназначенных для ручной установки и для обновлений, php.ini нет (это сделано специально, чтобы случайно не затереть ваш файл, с вашими уникальными настройками). Зато есть два других, которые называются php.ini-development и php.ini-production. Любой из них, при ручной установке, можно переименовать в php.ini и настраивать дальше. На локалхосте мы будет использовать php.ini-development.

php.ini-development —> php.ini

Открываем файл php.ini любым текстовым редактором, ищем строчку

  1. ;extension_dir = "ext"

    заменяем на—>

    extension_dir = "C:\Server\bin\PHP\ext\"

  2. ;extension=bz2
    ;extension=curl
    ;extension=ffi
    ;extension=ftp
    ;extension=fileinfo
    ;extension=gd
    ;extension=gettext
    ;extension=gmp
    ;extension=intl
    ;extension=imap
    ;extension=ldap
    ;extension=mbstring
    ;extension=exif ; Must be after mbstring as it depends on it
    ;extension=mysqli
    ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
    ;extension=odbc
    ;extension=openssl
    ;extension=pdo_firebird
    ;extension=pdo_mysql
    ;extension=pdo_oci
    ;extension=pdo_odbc
    ;extension=pdo_pgsql
    ;extension=pdo_sqlite
    ;extension=pgsql
    ;extension=shmop

    на—>

    extension=bz2
    extension=curl
    extension=ffi
    extension=ftp
    extension=fileinfo
    extension=gd
    extension=gettext
    extension=gmp
    extension=intl
    extension=imap
    extension=ldap
    extension=mbstring
    extension=exif ; Must be after mbstring as it depends on it
    extension=mysqli
    ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
    extension=odbc
    extension=openssl
    ;extension=pdo_firebird
    extension=pdo_mysql
    ;extension=pdo_oci
    extension=pdo_odbc
    extension=pdo_pgsql
    extension=pdo_sqlite
    extension=pgsql
    extension=shmop

  3. ;extension=soap
    ;extension=sockets
    ;extension=sodium
    ;extension=sqlite3
    ;extension=tidy
    ;extension=xsl

    на—>

    extension=soap
    extension=sockets
    extension=sodium
    extension=sqlite3
    extension=tidy
    extension=xsl

Этими действиями мы включили расширения. Они могут понадобиться в разных ситуациях для разных скриптов. Сохраняем файл и перезапускаем Apache


Дополнительная настройка PHP

PHP в настоящее время очень мощный, гибкий, удобный инструмент. На локальном компьютере с помощью него можно решать разнообразные задачи, совсем не обязательно связанные с генерацией Web-страниц. При решении неординарных задач можно упереться в ограничения, установленные в настройках. Эти настройки содержатся в файле php.ini (c:\Server\bin\PHP\php.ini)

C:\Server\bin\PHP\php.ini

Рассмотрим некоторые из них:

memory_limit = 128M

устанавливает максимальное количество памяти, которое может использовать скрипт

post_max_size = 8M

устанавливает максимальное количество данных, которые будут приняты при отправке методом POST

default_charset = "UTF-8"

устанавливает кодировку (по умолчанию)

upload_max_filesize = 2M

максимальный размер загружаемого на сервер файла. Изначально установлен очень маленький размер – только два мегабайта. Например, при загрузки базы данных в phpMyAdmin, не получится загрузить файл больше 2 мегабайт до тех пор, пока не будет изменён этот пункт настройки.

max_file_uploads = 20

максимальное количество файлов для загрузки за один раз

max_execution_time = 30

максимальное время выполнения одного скрипта

Полезно знать об этих настройках.

Автоматическое создание виртуальных хостов / субдоменов

Виртуальные хосты могут быть привязаны к имени хоста (например, study.loc), к IP (например, 127.0.0.3) и к порту (*:81). Второй и третий способ хороши тем, что нам не придётся решать вопрос о DNS преобразованиях имени нашего виртуального хоста (это, обычно, достигается изменением системного файла C:\Windows\System32\drivers\etc\hosts либо использованием личного DNS сервера с соответствующими записями).

Из всех имеющихся вариантов подключения виртуальных хостов Apache в Windows выбрал вариант — автоматического создания виртуальных хостов, т.к. считаю его наиболее удобным и практичным. Поэтому описание будет только для этого способа.

Начнём с небольшой подготовки. Создадим каталог, в котором будем размещать наши виртуальные хосты. Например, C:\Server\data\htdocs\virthosts\

А в этом каталоге создадим три новых папки: localhost1, localhost2, localhost3. В каждой из них создайте по индексному файлу (index.html) с любым содержанием, который позволил бы идентифицировать, что вы попали в нужный хост.


Я сделаю следующие записи в соответствующих индексных файлах хостов, для первого хоста:

local1

для второго

local2

для третьего

local3

Теперь приступим к настройке виртуальных хостов.

В файле C:\Server\bin\Apache24\conf\httpd.conf найдите и раскоментируйте следующую строку:

Include conf/extra/httpd-vhosts.conf

В файле C:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf закомментируйте (или удалите) те строки, которые приведены по умолчанию.

В файле C:\Server\bin\Apache24\conf\httpd.conf найдите и раскоментируйте следующую строку:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

В директории C:\Server\data\htdocs\virthosts\ создайте папку localhost (теперь именно её содержимое будет отображаться, когда вы в браузере набираете http://localhost).

В файл C:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf добавьте следующую строку:

VirtualDocumentRoot "C:/Server/data/htdocs/virthosts/%1/"

Перезапустите сервер Apache.

Теперь любая папка, созданная в C:\Server\data\htdocs\virthosts\ будет доступна по адресу вида:

http://имя_папки.localhost

В нашем случае,

при открытии http://localhost1.localhost мы увидим содержимое: local1

При открытии http://localhost2.localhost мы увидим содержимое: local2

При открытии http://localhost3.localhost мы увидим содержимое: local3


Установка и настройка phpMyAdmin

В каталоге C:\Server\data\htdocs\virthosts\ создаем папку phpmyadmin и копируем в нее содержимое архива phpMyAdmin-5.0.4-all-languages.zip. Переименовываем phpMyAdmin-5.0.4-all-languages в phpmyadmin (для лаконичности)

phpmyadmin —> C:\Server\data\htdocs\virthosts\

C:\Server\data\htdocs\virthosts\phpmyadmin

В каталоге C:\Server\data\htdocs\virthosts\phpmyadmin\ создаём файл config.inc.php и копируем туда:


<?php
/* Servers configuration */
$i = 0;
/* Server: localhost [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = '';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['nopassword'] = true;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
/* End of servers configuration */
$cfg['blowfish_secret'] = 'kjLGJ8g;Hj3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V';
$cfg['DefaultLang'] = 'ru';
$cfg['ServerDefault'] = 1;
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
?>
В браузере набираем http://phpmyadmin.localhost

В качестве имя пользователя вводим root. Поле пароля оставляем пустым. Если всё сделано правильно, то всё должно выглядеть так:

Мы уже настроили phpMyAdmin и большинству вполне достаточно базового функционала. Тем не менее, на стартовой странице phpMyAdmin есть надпись:«Дополнительные возможности phpMyAdmin не настроены в полной мере, некоторые функции были отключены»

Новыми возможностями являются:

показ связей между (связанными) таблицами;

добавление информации о таблицах (начиная с версии 2.3.0 вы можете описывать в специальной таблице ‘table_info’ какая колонка будет показана во всплывающей подсказке при движении курсором над связанным ключом);

создание PDF-схемы (начиная с версии 2.3.0 вы можете в phpMyAdmin создавать PDF страницы, показывающие связи между вашими таблицами); отображать комментарии столбцов (начиная с версии 2.3.0 вы можете делать комментарий с описанием каждого столбца для каждой таблицы. И они будут видны в «предварительном просмотре для печати». Начиная с версии 2.5.0, комментарии используются на собственных страницах таблиц и в режиме просмотра, показываясь как всплывающие подсказки над колонками (таблицы свойств) или встроены в заголовок таблицы в режиме просмотра. Они также могут быть показаны в дампе таблицы);

создавать закладки (начиная с версии 2.2.0, phpMyAdmin позволяет пользователям делать закладки на запросы. Это может быть полезно для часто используемых запросов);

история SQL-запросов (начиная с версии 2.5.0 вы можете сохранять вашу историю всех SQL запросов, которые были сделаны через интерфейс phpMyAdmin); дизайнер (начиная с версии 2.10.0, доступен инструмент Дизайнер; он позволяет визуально управлять связями между таблицами);

информация о недавно использованных таблицах;

настройка интерфейса часто используемых таблиц;

слежение (начиная с версии 3.3.x доступен механизм слежения. Он помогает вам проследить каждую SQL команду, которая была выполнена phpMyAdmin’ом. Поддерживается запись работы с данными и запись команд. После включения, вы сможете делать версии таблиц);

пользовательские настройки (начиная с версии 3.4.x, phpMyAdmin позволяет пользователям задавать большинство настроек и сохранять их в базе данных);

настраиваемые меню (начиная с версии 4.1.0 вы можете создавать группы пользователей, которым будут доступны только назначенные пункты меню. Пользователь может быть определён в группу и будет видеть только пункты меню, доступные для его группы);

спрятать/показать пункты навигации (начиная с версии 4.1.0 вы можете спрятать/показать пункты в навигационном дереве).

и другие

Активация дополнительных возможностей phpMyAdmin:



перейдите по ссылке http://phpmyadmin.localhost/chk_rel.php и кликните «Создать базу данных». После этого все новые функции будут активированы.

В последней версии phpMyAdmin данное действие перенесено во внутрь и производится из phpMyAdmin кликом по соответствующей ссылке.

Установка почтовой заглушки

В каталоге C:\Server\bin\ создайте новый каталог с названием Sendmail.

Теперь в этом каталоге создайте файл sendmail.php со следующим содержимым:


#!/usr/bin/env php
<?php
/* PHP.INI
* [mail function]
* ;SMTP = localhost
* ;smtp_port = 25
* ;sendmail_from = me@example.com
* sendmail_path = php.exe sendmail.php --dir C:\mail --open
*/

$is_windows = stristr(PHP_OS, 'WIN');
$options = getopt("", ['open', 'prepend', 'file:', 'dir:']);
$is_open = isset($options['open']);
$is_prepend = isset($options['prepend']);
$is_onefile = isset($options['file']);
$mail_dir = isset($options['dir']) ? $options['dir'] : sys_get_temp_dir() . '/mail';
$file_name = isset($options['file']) ? $options['file'] : mkname();
$file_path = $mail_dir . '/' . $file_name;

if (!is_dir($mail_dir)) {
mkdir($mail_dir, 0777, TRUE);
if (!is_dir($mail_dir)) {
die('Mail folder [' . $mail_dir . '] not created');
}
}

$stream = $is_onefile ? PHP_EOL . str_repeat("-=", 10) . date('Y-m-d H:i:s') . str_repeat("-=", 10) . PHP_EOL : '';
while (false !== ($line = fgets(STDIN))) {
//$stream .= ($is_windows ? str_replace("\n", PHP_EOL, $line) : $line);
$stream .= $line;
}

if ($is_prepend && file_exists($file_path)) {
$file_contents = file_get_contents($file_path);
$stream .= $file_contents;
}

file_put_contents($file_path, $stream, $is_prepend ? 0 : FILE_APPEND);

if ($is_open && $is_windows) {
pclose(popen("start /B notepad " . $file_path, "r"));
}

function mkname($i = 0) {
global $mail_dir;
$fn = 'mail_' . date('Y-m-d_H-i-s_') . $i . '.eml';
return file_exists($mail_dir . '/' . $fn) ? mkname( ++$i) : $fn;
}

Откройте конфигурационный файл PHP, он размещён здесь:

C:\Server\bin\PHP\php.ini

И добавьте туда одну строчку:

sendmail_path = "C:\Server\bin\PHP\php.exe C:\Server\bin\Sendmail\sendmail.php --dir C:\Server\bin\Sendmail\emails"

Сохраните файл и перезапустите сервер.

Отлично, теперь все отправленные письма будут сохраняться в каталоге C:\Server\bin\Sendmail\emails\

Письма будут иметь расширение .eml и их можно открывать, например, программой Thunderbird. Либо обычным текстовым редактором.


Добавление PHP директории в PATH на Windows

IT: плюшки, офигейки, знайки, делки и умелки


Website description, contact form, mini map or anything else.

This editable area is visible on all pages.