Добро пожаловать!
Здесь вы можете найти ответ на интересующий вас вопрос в отрасли сайтостроения, познакомится ближе с web технологиями и web стандартами.

Статьи

Установка Web-сервера Apache в связке с PHP 5 и MySQL.

Авторы: Симдянов И.В., Голышев С.В., Кузнецов М.В.
www.softtime.ru

В этой статье мы рассмотрим установку и настройку Web-сервера Apache, PHP 5 и СУБД MySQL для использования их на локальной машине под операционной системой Windows (2000 и XP). Использование локальных серверов может понадобится по многим причинам — вам необходимо изучить PHP или MySQL, а тестирование своих Web-приложений на хостинге либо дорого обходится, либо такой возможности вообще нет. В этом случае вам понадобится связка Apache+PHP+MySQL на локальной машине.

Для начала необходимо раздобыть дистрибутивы серверов Apache и MySQL, а так же архив PHP. Мы будем устанавливать и настраивать Apache 2, MySQL 4 и PHP 5.

Скачать Apache можно с зеркал, приведённых на официальном сайте http://www.apache.org/dyn/closer.cgi. При поиске следует помнить, что Apache так же может называться httpd, по имени его демона в UNIX. На зеркалах обычно много различных файлов, например:

  • httpd-2.0.49-win32-src.zip — это архив с исходными кодами (src) для Windows (win32) Web-сервера Apache (httpd) версии 2.0.49.
  • httpd-2.0.49.tar.gz — тоже самое, но для Linux, в котором программы принято распространять в исходных кодах.
  • apache_2.0.55-win32-x86-no_ssl.exe — а вот это, откомпилированный под архитектуру (x86) для Windows (win32) без поддержки SSL(no_ssl) сервер Apache (apache) версии 2.0.55 — вот он и нужен.

Примечание

Бинарные коды дистрибутивов Apache распространяются в нескольких вариантах, как с расширением *.exe, так и *.msi и имеют название вида apache_версия_win32_*_.msi.

Чтобы Вам долго не искать, вот ресурс, где можно его взять. Вторая и третья цифра в версии могут отличаться от приведённых здесь — следует выбирать самую последнюю версию, так как в ней устранены ошибки, обнаруженные в предыдущих версиях.

PHP 5 можно обнаружить на зеркалах http://www.php.net/downloads.php. На сайте PHP доступен в двух формах: исходных кодах (Complete Source Code) и предкомпилированном варианте (Windows Binaries). Нас будет интересовать предкомпилированная версия, которая так же распространяется в двух вариантах: в виде установщика (php-5.0.5-installer.exe) и виде zip-архива (php-5.0.5-Win32.zip). Установщик удобен в установке, но содержит лишь ограниченную версию PHP (для сравнения инсталлятор занимает 2 Мб, а zip-архив 7 Мб). Кроме того, использование автоматического инсталлятора не избавляет от необходимости настройки конфигурационного файла сервера Apache. Поэтому рекомендуется всё же загрузить zip-архив.

Дистрибутив MySQL можно загрузить со страницы http://dev.mysql.com/downloads/. Мало кто знает, что полное справочное руководство на русском языке можно найти на официальном сайте MySQL по адресу http://dev.mysql.com/doc/mysql/ru/index.html.

Установка Web-сервера Apache.

Создайте на диске D: папку work, а в ней — папки localhost, localhost1 и localhost2. В каждой из папок localhost, localhost1 и localhost2 создайте еще по две папки — cgi (для хранения CGI-сценариев) и www (для html-документов и программ на PHP).

Запустите установщик Web-сервера Apache. Результатом будет окно с лицензионным соглашением, после принятия которого, следует перейти к следующему окну с краткой информацией о нововведениях во второй версии Apache. Следующее окно, показанное на рисунке, позволяет ввести информацию о сервере: доменное имя сервера, имя сервера и адрес электронной почты администратора. При установке сервера Apache на локальную машину задайте следующие установки:

Network Domian: localhost
Server Name: localhost
Administrator's Email Adress: admin@localhost
Port: 80


Примечание:

Единственная причина использования нестандартного порта — это отсутствие прав на использование стандартного порта. При использовании нестандартного порта, например, 8080 номер порта следует указывать в адресе, например: http://localhost:8080/.

Если установка прошла успешно, Windows автоматически запустит Apache. По умолчанию вместе с сервером запускается утилита мониторинга работы сервера Apache Service Monitor, значок которой помещается в системном триере.

В Windows управлять работой сервера Apache можно несколькими способами:

  • при помощи утилиты Apache Service Monitor
    Для запуска Web-сервера Apache при помощи утилиты Apache Service Monitor дважды щелкните на значке программы в системном триере. В появившемся окне кнопками Start, Stop и Restart можно производить пуск, остановку и перезапуск сервера.


  • используя консоль управления сервисов Windows
    Если при установке сервера в качестве порта, по которому Apache принимает запросы, был выбран порт 80, допускается запуск Apache в качестве сервиса Windows. Для запуска консоли управления выполните команду Пуск > Настройка > Панель управления > Администрирование > Службы или нажмите кнопку Services в утилите Apache Service Monitor. В появившемся окне консоли следует выбрать сервис Apache2. Контекстное меню позволяет осуществлять запуск, остановку и перезапуск сервиса.

    Службы Windows позволяют осуществить запуск фоновых приложений при старте системы. Для этого необходимо выбрать в контекстном меню сервиса пункт Свойства и в появившемся окне, в выпадающем списке Тип запуска выбрать пункт Авто:


  • используя пункты меню Пуск
    Осуществлять пуск, остановку и перезапуск сервера Apache можно также из меню Пуск. Для этого следует перейти в меню Пуск > Программы > Apache HTTP Server > Control Apache Server.

  • из командной строки
    Запускать, останавливать и перезапускать сервер Apache из командной строки можно при помощи следующих команд:
    • Apache -k start — старт;
    • Apache -k restart — перезапуск;
    • Apache -k stop — стоп.
    Все команды следует выполнять из каталога bin сервера Apache
    (C:/Program Files/Apache Group/Apache2/bin/).

Для того, чтобы Apache помимо html-файлов обрабатывал и php-файлы, в строку text/html в файле
C:/Program Files/Apache Group/Apache2/conf/mime.types
следует добавить расширение для файлов, содержащих php-скрипты (php, phtml):
text/html html htm shtml shtm php phtml

Основные директивы настройки Apache хранятся в файле httpd.conf, расположенного в директории C:/Program Files/Apache Group/Apache2/conf/. Для успешной работы этот файл необходимо настроить:

  1. В поле ServerAdmin следует указать адрес электронной почты администратора сервера:
    ServerAdmin admin@localhost
    Этот адрес будет в дальнейшем показываться в окне браузера в сообщениях об ошибке сервера.

  2. Задайте значение параметра ServerName (имя сервера) следующим образом:
    ServerName localhost
    По этому имени к нему будут обращаться машины из сетевого окружения.

  3. В поле DocumentRoot укажите тот каталог, в котором будут размещены ваши html-файлы:
    DocumentRoot D:/work/localhost/www

  4. Директиву <Directory />, в которой хранятся установки для всех директорий по умолчанию, следует исправить следующим образом:
       <Directory />
         Options FollowSymLinks Includes Indexes
         AllowOverride None
       </Directory>
    
    • Директива AllowOverride (allow-разрешать, override-аннулировать) установленная в значение None(All) запрещает (разрешает) переопределять значения главного конфигурационного файла httpd.conf в файлах .htaccess.
    • Директива Options FollowSymLinks разрешает Apache следовать символическим ссылкам.
    • Директива Options Includes разрешает выполнение директив SSI (Server Side Includes) в коде страниц web-сайта.
    • Директива Options Indexes указывает, что нужно возвращать содержимое каталога, если отсутствует индексный файл.

  5. Директивы Options и AllowOverride применяются к корневому каталогу основного Web-сайта т.е. к DocumentRoot. Теперь откроем доступ к каталогу DocumentRoot, изменив директиву
    <Directory "C:/Program Files/Apache Group/Apache2/htdocs">
    следующим образом:
    <Directory "D:/work/localhost/www">
      Options FollowSymLinks Includes Indexes
      AllowOverride None
      Order allow,deny
      Allow from all
    </Directory>
    
    Клиент, не соответствующий директиве allow или соответствующий директиве deny, не получает доступ к серверу. Строка Allow from all означает, что разрешен доступ для всех.

  6. Если необходимо назначить имена так называемых индексных файлов, которые автоматически будут выданы сервером в случае передачи в адресе только имени папки (например http://localhost/manual/), необходимо их перечислить после директивы DirectoryIndex:
    DirectoryIndex index.htm index.html index.php index.phtml
    Поиск файлов будет производиться в порядке, указанном в директиве DirectoryIndex.

  7. Теперь изменим директорию для хранения CGI-скриптов, изменив директиву ScriptAlias на
    ScriptAlias /cgi-bin/ "D:/work/localhost/cgi". Не забудьте заменить строку
    <Directory "C:/Program Files/Apache Group/Apache2/cgi-bin">
    на
    <Directory "D:/work/localhost/cgi">

  8. Найдите и настройте (не забудьте раскрыть комментарий) следующий параметр:
    AddHandler cgi-script .bat .exe .cgi
    Он говорит Apache о том, что файлы с расширениями exe, bat и cgi надо рассматривать как CGI-модули.

  9. И последнее — установите следующий параметр:
    AddHandler server-parsed .shtml .shtm
    Этим вы заставляете Apache обрабатывать файлы с указанными расширениями процессором SSI.

На одном WEB-сервере Apache можно установить несколько WEB-сайтов. Эта функция сервера называется виртуальным хостингом. Сначала требуется указать какой IP-адрес используется для виртуальных хостов:

NameVirtualHost 127.0.0.1:80

Далее прописываются виртуальные хосты:

#
#   localhost
#
<VirtualHost 127.0.0.1:80>
   ServerAdmin admin@localhost
   ServerName localhost
   DocumentRoot "D:/work/localhost/www"
   ServerAlias www.site.ru www.host.ru
   ScriptAlias /cgi-bin/ "D:/work/localhost/cgi"
   ErrorLog D:/work/localhost/error.log
   CustomLog D:/work/localhost/access.log common
</VirtualHost>

Рассмотрим директивы виртуального хоста:

  • DocumentRoot указывает каталог, где расположены файлы данного виртуального хоста (WEB-сайта)
  • ServerName указывает имя виртуального хоста, по которому к нему можно обратиться. В данном случае, по адресу http://localhost/.
  • ServerAlias содержит псевдонимы имен виртуального хоста. В данном случае к виртуальному хосту можно также обратиться, используя имена: http://www.site.ru/ и http://www.host.ru/.
  • ErrorLog и CustomLog указывает имена логов сервера для этого виртуального хоста.

Контейнеры обычно располагают один за другим в конце файла httpd.conf.

#
#   localhost1
#
<VirtualHost 127.0.0.1:80>
   ServerAdmin admin@localhost1
   ServerName localhost1
   DocumentRoot "D:/work/localhost1/www"
   ServerAlias www.site1.ru www.host1.ru
   ScriptAlias /cgi-bin/ "D:/work/localhost1/cgi"
   ErrorLog D:/work/localhost1/error.log
   CustomLog D:/work/localhost1/access.log common
</VirtualHost>
#
#   localhost2
#
<VirtualHost  127.0.0.1:80>
   ServerAdmin admin@localhost2
   ServerName localhost2
   DocumentRoot "D:/work/localhost2/www"
   ServerAlias www.site2.ru www.host2.ru
   ScriptAlias /cgi-bin/ "D:/work/localhost2/cgi"
   ErrorLog D:/work/localhost2/error.log
   CustomLog D:/work/localhost2/access.log common
</VirtualHost>

Для того, чтобы обращаться к виртуальным узлам по именам их следует прописать в базы данных DNS-сервера. Если Вы используете Apache для тестирования файлов на локальной машине, то имена ваших виртуальных узлов следует прописать в файле hosts. Для Windows 2000 и XP он расположен в каталоге C:/Windows/System32/Drivers/etc. Файл hosts содержит записи вида:

127.0.0.1     localhost
127.0.0.1     localhost1
127.0.0.1     localhost2
127.0.0.1     www.site.ru
127.0.0.1     www.host.ru
127.0.0.1     www.site1.ru
127.0.0.1     www.host1.ru
127.0.0.1     www.site2.ru
127.0.0.1     www.host2.ru

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

Для установки PHP следует создать каталог C:/Program Files/php и разместить в нём файлы из zip-архива дистрибутива. После этого следует переименовать конфигурационный файл php.ini-dist в php.ini и скопировать его в директорию Windows.

Так как на локальной машине Вы, скорее всего, будете заняты тестированием ваших Web-приложений, то необходимо должным образом настроить конфигурационный файл php.ini.

Найдите директиву error_reporting и установите для неё следующее значение:
error_reporting = E_ALL
Это значение настроит PHP таким образом, что при работе PHP-скриптов будут отображаться все ошибки.

Так же обходимо проследить, чтобы директива display_errors была включена:
display_errors = On
Если данная директива отключена (Off), то сообщения об ошибках не будут выводится в окно браузера.

Так же необходимо проследить, чтобы директива variables_order имела следующее значение:
variables_order = "EGPCS"
Буквы здесь означают следующее:

  • E - переменными среды
  • G - переменными передаваемыми по методу GET (G)
  • P - переменными передаваемыми по методу POST (P)
  • C - Cookies
  • S - сессии
Отсутствие какой-либо из букв не позволит вам работать с соответствующими переменными.

Следующая директива, которая может потребовать настройки — это register_globals. Если данная директива включена (register_globals=On), то переменные передаваемые метором GET, POST, через cookies и сессии можно использовать в PHP-скрипте, обращаясь к ним просто как обычным переменным $somevar.

Если данная директива отключена (register_globals=Off), то к таким переменным можно будет обращаться только при помощи суперглобальных массивов ($_POST, $_GET и т.п.).

Директива register_long_arrays позволяет использовать суперглобальные массивы в старом формате ("длинном" — $HTTP_GET_VARS, $HTTP_POST_VARS и т.д.).

  • Установка PHP, как CGI-приложения
    В конфигурационном файле сервера Apache httpd.conf перед блоком описания виртуальных хостов необходимо добавить следующие строки:
    AddType application/x-httpd-php phtml php
    <Directory "C:/Program Files/php">
       Options ExecCGI
    </Directory>
    ScriptAlias "/php_dir/" "C:/Program Files/php/"
    Action application/x-httpd-php "/php_dir/php-cgi.exe"
    

    Примечание

    При установке PHP как CGI перестанут работать некоторые заголовки, например, Вы не сможете организовать авторизацию пользователей средствами PHP. Авторизации можно будет реализовать только средствами самого Apache с помощью файлов .htaccess.

  • Установка PHP в качестве модуля
    Добавьте в конфигурационный файл сервера Apache httpd.conf следующие строки:
    AddType application/x-httpd-php phtml php
    LoadModule php5_module "C:/Program Files/php/php5apache2.dll"
            

После этого необходимо перегрузить сервер Apache, а в корневой директории виртуального хоста D:/work/localhost/www создать пробный файл PHP (test.php):

<?php
  phpinfo();
?>

В случае успешной настройки, обращение по адресу http://localhost/test.php отобразит фиолетовую таблицу с текущими настройками PHP, которая выдаётся функцией phpinfo():

Подключение MySQL.

Если сервер MySQL уже установлен на Вашей машине, то следующим шагом будет настройка PHP для работы с базами данных MySQL.

Откройте на редактирование файл php.ini из каталога Windows.

Для подключения библиотеки расширения MySQL вам нужно убрать символ комментария ; (точка с запятой) из строки: extension=php_mysql.dll

Также проверьте значение директивы extension_dir:
extension_dir="C:/Program Files/php/ext"
Она должна указывать на каталог, где хранятся расширения PHP. Однако, если ничего не получается, установите значение директивы extension_dir="./", а библиотеку php_mysql.dll скопируйте в C:/Program Files/php — в большинстве случаев это должно помочь.

Если PHP у Вас подключен как модуль, то Вам также необходимо скопировать библиотеку libmysql.dll из каталога с установленным PHP в системный каталог C:/Windows/System32. Чтобы внесенные изменения вступили в силу — перезагрузите Apache.

Для проверки работы MySQL создайте проверочный скрипт со следующим кодом:

<?php
  $dblocation = "127.0.0.1";
  $dbname = "test";
  $dbuser = "root";
  $dbpasswd = "";
  $dbcnct = @mysql_connect($dblocation, $dbuser, $dbpasswd);
  if (!$dbcnct)
  {
    echo "<p>К сожалению, не доступен сервер MySQL</p>";
    exit();
  }
  if (!@mysql_select_db($dbname,$dbcnct) )
  {
    echo "<p>К сожалению, не доступна база данных</p>";
    exit();
  }
  $ver = mysql_query("SELECT VERSION()");
  if(!$ver)
  {
    echo "<p>Ошибка в запросе</p>";
    exit();
  }
  echo "Версия MySQL: ".mysql_result($ver, 0);
?>

В случае успешной интеграции MySQL в связку Apache и PHP, обращение к проверочному скрипту выведет в окно браузера версию сервера MySQL:

В новых версиях MySQL (начиная с 4.1.0) изменился порядок работы с национальными кодировками, поэтому старый код может вызывать появление в таблице базы данных знаков вопроса '????????' вместо русского текста. Для того, чтобы этого не возникало, в начало PHP-скрипта, после установки соединения с базой данных, следует поместить следующие строки:

<?php
  mysql_query ("set character_set_client='cp1251'");
  mysql_query ("set character_set_results='cp1251'");
  mysql_query ("set collation_connection='cp1251_general_ci'");
?>

Установка phpMyAdmin.

Инсталляция phpMyAdmin протекает в несколько этапов.

  1. Распакуйте архив с дистрибутивом в директорию D:/work/localhost/www/phpmyadmin.
  2. Откройте файл config.inc.php и измените следующие строки:
    $cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin';
    $cfg['Servers'][$i]['host'] = 'localhost';
    $cfg['Servers'][$i]['user'] = 'root';
    $cfg['Servers'][$i]['password'] = '';
    
  3. Откройте в браузере главную страницу phpMyAdmin, расположенную по адресу
    http://localhost/phpmyadmin/index.php.
  4. Для того, чтобы настроить все элементы phpMyAdmin, необходимо создать базу данных phpmyadmin и разместить в ней вспомогательные таблицы. Для этого необходимо выполнить SQL-запросы, помещенные в файл scripts/create_tables.sql. Перейдите по гиперссылке Окно запроса в левом верхнем углу панели управления:


    Во всплывающем окне перейдите на закладку Импорт файлов, выберите файл create_tables.sql и нажмите кнопку Пошел:


  5. После SQL-запросов из файла create_tables.sql вы должны выставить имена таблиц в конфигурационном файле config.inc.php:
    $cfg['Servers'][$i]['pmadb']         = 'phpmyadmin';
    $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
    $cfg['Servers'][$i]['relation']      = 'pma_relation';
    $cfg['Servers'][$i]['table_info']    = 'pma_table_info';
    $cfg['Servers'][$i]['table_coords']  = 'pma_table_coords';
    $cfg['Servers'][$i]['pdf_pages']     = 'pma_pdf_pages';
    $cfg['Servers'][$i]['column_info']   = 'pma_column_info';
    $cfg['Servers'][$i]['history']       = 'pma_history';
    

Приложение phpMyAdmin может применяться для администрирования нескольких серверов MySQL, поэтому будьте внимательны: исправление для одного сервера не коснется другого сервера. Одна из ошибок конфигурирования заключается в изменении перечисленных выше директив для одного из следующих серверов, в то время как для первого сервера директивы остаются неустановленными.