Автор Тема: Установка Apache + PHP + MySQL на windows  (Прочитано 130 раз)

SysBox

  • Администратор
  • Новичок
  • *****
  • Сообщений: 5
  • Администратор
    • Просмотр профиля
    • SysBox
Установка Apache + PHP + MySQL на windows
« : 05 Ноябрь 2017, 01:21:37 »
Создание среды разработки (локальный веб-сервер)

1. Локальный веб-сервер можно быстро установить автоматически

XAMPP
DENWER
OPEN-SERVER
и т.п. но понимания, как все работает, не будет.



2. Ниже инструкция как сделать локальный веб-сервер вручную

Нас ждет установка и настройка Apache + PHP + MySql на Windows.
По сути, мы создадим домашний хостинг. Использовать его вместо платного можно, настроив, но так никто не делает по причинам:

* 24 часа в сутки шумит компьютер
* не рациональный расход электричества
* железо изнашивается быстрее
* железо сломалось, нет электричества, нет интернета - сайты пропали на Х времени
* нужно организовывать резервирование
* нужно отдельно заниматься безопасностью
* желательно оплачивать постоянный IP адрес
* возможна не стабильная скорость ответа

В общем делать из ПК боевой сервер это все равно, что не покупать готовое молоко в пакете, а завести корову, выделить помещение, завозить корма, вывозить навоз, убирать, лечить, доить. Да молоко свое, но какой ценой?

Если хотите реальный хостинг, то купите его. Или купите виртуальный сервер DigitalOcean, IHOR и поставьте туда VESTA.



3. Необходимое ПО

Все нужное - бесплатное. Не скачивайте сверхновые программы с пометкой Альфа (Alpha), Бета (Beta) и т.д. - это не стабильные версии. Скачивайте только стабильные (Stable) версии.

Сервер Apache
https://www.apachelounge.com/download/
Например: httpd-2.4.29-win64-VC14.zip
(на официальном сайте (http://httpd.apache.org/) нет установщика под windows)

Язык PHP
http://windows.php.net/download/
Например: VC14 x64 Thread Safe
"Thread Safe" означает многопоточность. Если PHP ставится как модуль (мы так и бдуем делать), нужно ставить с Thread Safe.

MySQL сервер
https://dev.mysql.com/downloads/mysql/
Например: mysql-installer-web-community-5.7.20.0.msi
Когда попросят авторизоваться или зарегистрироваться нажмите ниже "No thanks, just start my download." (Нет, спасибо, начать скачку)

Программы для работы с MySQL
Написан на PHP, работает через браузер
https://www.phpmyadmin.net/downloads/
Windows приложение:
https://www.heidisql.com/download.php

Текстовый редактор
https://notepad-plus-plus.org/

Средство разработки (платное)
Это один из лидеров средств разработки веб-ПО вместо обычного текстового редактора.
Ставить не обязательно, но желательно.
Универсальный, под разные языки:
http://www.jetbrains.com/idea/
Изначально настроен под PHP:
http://www.jetbrains.com/phpstorm/

Готовые папки с файлами-тестами вашего локального сервера

Виртуальная машина VirtualBox
https://www.virtualbox.org/
Дает возможность не захломлять свой ПК, а экспериментировать на виртуальном windows.



4. Важно понять принцип работы нашего веб-сервера

Веб-сервер - это физический или виртуальный компьютер. На нем запущена и постоянно работает специальная программа Apache. Если к этому серверу послать запрос, например через браузер, именно Apache примет этот запрос, запустит на сервере нужные программы и выдаст обратно ответ. Браузер из этого ответа сформирует привычную нам страницу сайта и покажет ее пользователю.



5. Создаем папки

c:/server/ - тут будет Apache, PHP, Mysql.
с:/server/sendmail/ - нужна для "заглушки" отправки почты
c:/www/test.ru/www/ - тут будут файлы сайта
c:/www/test.ru/log - тут будут логи сайта

Сайтов может быть много. Папки сайтов и логов нужно создавать заранее иначе Apache не запустится.

c:/www/ - Общая папка для всех сайтов
c:/www/test.ru/ - Папка конкретного сайта. На этом уровне располагают файлы которые не видны в интернете, например служебные, пароли, логи, статистика и т.д.
c:/www/test.ru/www/ - Здесь размещаются непосредственно файлы сайта (картинки, HTML, файлы для скачивания и т.д.) Грубо говоря, если в браузере набрать test.ru, то будет "видно" содержимое именно этой папки.



6. Установка Apache

Настройки Apache где-то тут:
c://Program Files (x86)/Apache Software Foundation/Apache2.2/conf/httpd.conf
Для применения изменений в этом файле нужно перезагружать Apache.

----------
Чтобы Apache принимал запросы только с локального компьютера, указываем его неизменный IP адрес и порт: 127.0.0.1:80
Т.е. скачать или запустить что-то на вашем хостинге можете только Вы.

Заменяем
Listen 80
на
Listen 127.0.0.1:80

----------
Модуль mod_rewrite.so нужен для реализации человеку понятных адресов (ЧПУ)
Применяется для создания ссылок на страницы вида: test.ru/news/2020/03/
Убрать знак комментария "#":
LoadModule rewrite_module modules/mod_rewrite.so

----------
Для того, что бы можно было использовать файлы .htaccess
После кода:

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

Изменяем
AllowOverride None
на
AllowOverride All

----------
При при запросе у сервера папки (http://test.ru/papka/), сервер автоматически будет искать и запускать указанные в этой папке файлы: http://test.ru/papka/index.html и т.п.

Заменяем
DirectoryIndex index.html
на
DirectoryIndex index.html index.htm index.php

----------
Даем доступ к папке "www" и создаем настройки.
После кода:

<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

Добавляем:

<Directory "C:/www">
AllowOverride All
Options Indexes FollowSymLinks Includes
Order allow,deny
Allow from all
</Directory>

Indexes - возвращает клиенту листинг каталога, если в нем нет индексных файлов
FollowSymLinks - Позволяет использовать символические ссылки (нужно для работы mod_rewrite)
Includes - Разрешает выполнение SSI директив в файлах

----------
Указываем расширения файлов для SSI
После кода :
 
 # To parse .shtml files for server-side includes (SSI):
 # (You will also need to add "Includes" to the "Options" directive.)
 
 Вставить:
 
AddType text/html .shtml .html. .htm
AddOutputFilter INCLUDES .shtml .html .htm

----------
Присоединение к основному конфигурационному файлу, файл httpd-vhosts.conf
Тогда при запуске Apache прочитает оба файла.
Убрать знак комментария "#":
Include conf/extra/httpd-vhosts.conf

----------
Далее изменяем в файле
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\extra\httpd-vhosts.conf

Даем понять Apache, что:
Есть виртуальный хост, т.е. сайт.
Его файлы лежат здесь "DocumentRoot"
Показывать именно этот сайт если запрашивают домен "ServerName" или "ServerAlias"
Логи писать сюда "ErrorLog" и сюда "CustomLog"
 
Для этого удаляем старые записи
<virtualhost>
.......
</virtualhost>
и добавляем новые:

<VirtualHost *:80>
DocumentRoot c:/www/test.ru/www
ServerName test.ru
ServerAlias www.test.ru
ErrorLog c:/www/test.ru/error.log
CustomLog c:/www/test.ru/access.log common
</VirtualHost>



7. Установка PHP

PHP - это популярный язык программирования применяемый для создания сайтов.
В установке обычно выбирают эти модули:
GD2 - для работы с изображениями
mysqli - для работы с базой данных

Настройки PHP в файле:
C:\Program Files (x86)\PHP\php.ini

позволит выполнять код PHP в контейнере <? ... ?>
по умолчанию кодом PHP считается все в контейнере <?php ... ?>
short_open_tag = On

максимальное время выполнения программы в секундах
(на реальных хостингах обычно 30)
max_execution_time = 3600

максимальное время получения данных (например загрузки файла) в секундах
(на реальных хостингах обычно 60)
max_input_time = 3600

максимальный объем памяти который может занять Ваш PHP скрипт
(на реальных хостингах обычно 32М)
memory_limit = 256M

выводить на экран ошибки PHP
(на реальных хостингах всегда OFF в целях безопасности)
display_errors = On

выводить на экран ошибки в момент запуска PHP
display_startup_errors = On

если надо подкрасить все ошибки красным разкомментируем эти строки:
error_prepend_string = "<font color=#ff0000>"
error_append_string = "</font>"

максимальный объем, который можно передать PHP скрипту методом POST
(на реальных хостингах обычно 4М)
post_max_size = 1000M

максимальный объем файла, который можно передать PHP скрипту
(на реальных хостингах обычно 2М)
upload_max_filesize = 1000M

Заменяем путь файла ошибок, на более удобный
error_log="C:\WINDOWS\temp\php-errors.log"
заменяем на:
error_log="C:\www\php-errors.log"

Требуется установка времени сервера иначе PHP постоянно будет выдавать предупреждения
изменяем
;date.timezone =
например, на
date.timezone ='Europe/Moscow'

Что бы работала "заглушка" для отправки e-mail после строки
;sendmail_path =
добавляем
sendmail_path = php.exe c:/www/sendmail/sendmail.php
тогда при выполнении функции PHP - mail(); письмо будет сохранено в виде файла в папке
c:/www/sendmail/




8. Установка MySQL

MySQL - это база данных. Т.к. далеко не всю информацию удобно хранить в файлах, наличие базы данных очень часто является необходимостью. При установке обязательно поставьте галочку Include Bin Directory in Windows PATH иначе PHP не сможет найти нужные ему файлы mysql.

(в тестовых файлах PHP, с сайта sysbox.ru, для подключения к базе данных указаны
логин: root
пароль: root
изменить их можно в файле config.php)

Кодировки MySQL это отдельный рассказ, т.к. нюансов множество.
При установке MySQL желательно указать именно UTF-8 (инсталлятор так и рекомендует сделать). Это универсальная, многобайтовая кодировка.

Обычно возникает путаница с кодировками: ошибки при записи в базу данных, читаются иероглифы, появляются вопросики вместо букв и т.д. MySql имеет массу настроек кодировок. Важные для PHP:

character_set_client = кодировка данных отправляемых от PHP
character_set_connection = кодировка, в которую преобразуется информация пришедшая от PHP, перед выполнением запроса на сервере
character_set_results = кодировка данных отправляемых к PHP
collation_connection = кодировка в которой производится сопоставление в базе данных. Используется для сортировки и выборки.

В помощь: если база данных в UTF-8, а на сайте работаете в кодировке windows-1251, то после подключения к базе данных надо выполнить запрос:
SET NAMES cp1251
который равносилен этим трём:
SET character_set_client = cp1251
SET character_set_results = cp1251
SET character_set_connection = cp1251

Настройки MySQL лежат в файле:
c:\Program Files (x86)\MySQL\MySQL Server 5.1\my.ini

Если сам MySQL использует UTF-8 по умолчанию, то лезть в файл настроек как правило не нужно и все проблемы с кодировками можно решить с помощью MySQL менеджера (например программы HeidiSQL) и запросов SQL.



9. Настройка Windows

Что бы при наборе в браузере определенных сайтов браузер искал их не в интернете, а на локальном компьютере,
в файл:
C:\WINDOWS\system32\drivers\etc\hosts
добавляем (для этого вы должны иметь права администратора компьютера):

127.0.0.1 localhost
127.0.0.1 test.ru
127.0.0.1 www.test.ru

Запись "127.0.0.1 localhost" нужна для того, что бы можно было подключаться к MySQL из PHP указывая не IP адрес 127.0.0.1, а зарезервированное имя "localhost". Так правильнее и "localhost" часто используется на реальных хостингах.



10. Перезапуск  Apache

Для Windows Vista и Windows7:
остановить и снова запустить Apache



11. Настройка программы phpMyAdmin

phpMyAdmin - это программа для администрирования базы данных MySQL.
Написана на языке PHP, работает через браузер.
Примечательна тем, что на большинстве реальных хостингах она установлена и рекомендуется для работы с базой данных.

Распаковываем все файлы в какую-нибудь папку на сайте, например в "c:/www/test.ru/www/pma/"
В корне переименовать файл
config.sample.inc.php
в
config.inc.php
и редактируем всего одну строчку (надо указать любой код, например "xxx"):
$cfg['blowfish_secret']='xxx';
После чего запускаем phpMyAdmin, набрав в браузере:
test.ru/pma
Вводим логин и пароль которые указывали при установке MySQL

Остальные настройки менять НЕ нужно и по умолчанию они должны содержать:
$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]['nopassword'] = true;

Если в файле
C:\WINDOWS\system32\drivers\etc\hosts
нет строчки
127.0.0.1 localhost
то phpMyAdmin может не работать "зависать" и выдавать ошибки, например:
#2002 - Сервер не отвечает (либо сокет локального MySQL-сервера некорректно настроен)
Эти зависания можно вылечить изменив в настройке phpMyAdmin:
$cfg['Servers'][$i]['host'] = 'localhost';
на
$cfg['Servers'][$i]['host'] = '127.0.0.1';
но правильнее внести строчку
127.0.0.1 localhost
в файл hosts, т.к. на реальных хостингах, в скриптах PHP при подключении к MySQL указывается именно "localhost", а не конкретные IP адреса.

« Последнее редактирование: 07 Ноябрь 2017, 23:59:29 от SysBox »