Nickolay.info. PHP. Статьи. Ставим PHP и MySQL под Windows

Пошаговая инструкция + дистрибутивы для установки локального сервера IIS, PHP и MySQL под Windows XP. Пример скрипта на PHP, работающего с базой данных. Более новый текст (PHP 5.3 и Windows 7) находится здесь.

1. Сначала проверим, установлен ли у нас Internet Information Services (далее IIS), то есть, локальный сервер от Microsoft, встроенный в Windows. Запускаем Панель управления, далее Установка и удаление программ, кнопка "Установка компонентов Windows". Включаем галочку Internet Information Services, нажимаем кнопку "Состав". Из всех перечисленных в окне IIS компонент оставляем только Общие файлы, Оснастку IIS и службу WWW. Выделив эту последнюю, еще раз нажимаем кнопку "Состав". Из четырех компонент в окне "Служба WWW" достаточно одной - собственно, самой службы. Нажав ОК в обеих окнах, нажимаем "Далее" в окне Мастера компонентов Windows.

Возможно, при установке Мастер попросит Вас указать сменный диск или папку, где хранится дистрибутив Windows, но скорее всего, обойдется и так.

2. Сервер установлен, давайте посмотрим, работает ли он: запустив Internet Explorer, наберем в адресной строке

http://127.0.0.1/

Хм... появилось окно с запросом логина и пароля? Или другое непонятное сообщение? Научимся настраивать права на скрипты, прежде чем двигаться дальше. Если уже умеете настраивать права или они кем-то настроены - идите к шагу 6.

3. Давайте проверим права на файлы. Открыв через Мой компьютер папку c:\Inetpub, щелкаем правой кнопкой на вложенной папке wwwroot (это и есть корень нашего локального сервера) и выбираем пункт "Общий доступ и безопасность". В открывшемся окне "Свойства: wwwroot" всего 4 бесполезных вкладки? Если нет - пропускаем шаг 4 и идем на 5.

4. Нажать "Отмена", в верхнем меню папки Inetpub выбрать пункты Сервис, Свойства папки, на вкладке Вид в списке "Файлы и папки" найти и снять флажок "Использовать простой общий доступ к файлам", затем нажать "Применить ко всем папкам", "Да", "Применить", "ОК" (это всё кнопки). От одного отвратительного свойства Windows мы избавились навсегда.

5. В окне "Свойства: wwwroot" - 5 вкладок, одна из них называется Безопасность. Идем туда, под списком "Группы или пользователи" нажимаем "Добавить", в появившемся окне "Выбор" жмем "Дополнительно", а еще в одном новом окне "Выбор" (на сей раз пользователя или группы) давим "Поиск". Находим в списке "Имя" внизу окна (кстати, это всё пользователи Вашего компа, а Вы не знали? :-) юзера с именем типа IUSR_COMPNAME, где COMPNAME - заданное при установке имя Вашего компьютера, давим "ОК", в предыдущем окне снова "ОК", в списке "Группы или пользователи" нашей папки, наконец-то, появилась "Гостевая учетная запись Интернета". Давим для нее галочку "Разрешить полный доступ". В жизни так не делается, но на локалхосте пока сойдет. После этого нужно нажать в окне "Свойства: wwwroot" кнопку "Дополнительно" и в новом окне "Дополнительные параметры безопасности" включить галку "Заменить разрешения для всех дочерних объектов...", потом нажать "Применить", сказать "Да" на предупреждение, и, само собой, "ОК".

Думаете, это всё? Как бы ни так. Повторим всю процедуру для юзверя с именем типа IWAM_COMPNAME, он же - "Учетная запись для запуска IIS".

Теперь, наконец, "Применить" и "ОК" из окна "Свойства: wwwroot".

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

Кстати, если Вы криво (то есть, не думая о правах на файлы) положили скрипты внутрь папки wwwroot и они не запускаются на локалхосте - попробуйте "волшебную процедуру" из шагов 4 и 5.

6. Проверим работу сервера на простейшем файле:

<html>
<body>Hello, server</body>
</html>

Этот шедевр надо сохранить под именем index.html в папке c:\Inetpub\wwwroot.

Всю остальную пакость в папке wwwroot можно и нужно истребить.

Пробуем набрать в адресной строке браузера

http://127.0.0.1/index.html

Текст "Hello, server" виден? Отлично. А ведь мы уже получили этот файл через свой локальный сервер.

Пробуем просто

http://127.0.0.1

- и опять вилы. Дебильный сервер от Microsot просто не знает, какие файлы нужно назначать открываемыми по умолчанию. Поможем ему в этом.

Идем в Панель управления если слева есть "Переключение к классическому виду" - нажимаем (хотя я не верю, что у Вас выбран омерзительный как Windows Vista "вид по категориям"). Входим в папку Администрирование, запускаем ярлык Internet Information Services. Раскрываем древовидный список слева до узла "Веб-узел по умолчанию". Кстати, что это за мерзкое имя? Правая кнопка, Переименовать, вводим www.

Правая кнопка на свежеименованном Web-узле www, пункт Свойства. Вкладка Документы, галка "Задать документ, используемый по умолчанию" включена, истребляем из списка всё, кроме index.htm, добавляем в него имена index.html и index.php (мы же ещё PHP собрались ставить, помните?).

Применяем изменения, снова пробуем адрес

http://127.0.0.1

из браузера - всё работает.

7. Ставим PHP. Дистрибутив одной из любимых мной версий (4.3.1, есть и новее) можно взять прямо отсюда: php-4.3.1-installer.zip (1 Мб). Ни о чем лишнем он Вас не спросит, знай нажимай "Next" да "OK". В архиве только один исполняемый файл, Никаких лишних галок тоже ставить не надо. Давайте просто пропишем расширение .php в нашем сервере и выполним тестовый скрипт.

Снова вызвав из администрирования IIS окно "Свойства: www", открываем вкладку Домашний каталог, жмем кнопку "Настройка", затем "Добавить", в поле "Исполняемый файл" пишем (или показываем "Обзором") путь

C:\PHP\php.exe

в поле "Расширение" пишем

.php

(перед расширением - символ точки) и жмём "ОК". Как всегда, применяем сделанные изменения.

В случае, если Вы ставите PHP версии 5 и выше под Windows XP с серверной компонентой IIS версий 5.1 или 6.0, обработчик будет иным и Вам понадобится дополнительная компонента Windows для поддержки FastCGI, подробнее читайте в этой статье: Установка PHP 5 под IIS 5.1 или 6.0 (Windows Xp SP2/SP3)

8. Тестируем работу PHP. Создав в папке c:\Inetpub\wwwroot файл с именем index.php и следующим содержимым:

<?
 phpinfo();
?>

выполняем его из браузера адресной строкой

http://127.0.0.1/index.php

Появилась куча табличек? Поздравляю, все работает.

Кстати Вы наверное догадались, что реакция на путь

http://127.0.0.1

зависит от того, что выше в списке "Документы", который мы сделали на шаге 6 - имя index.html или index.php. Я бы поставил второе, но это дело вкуса.

И Internet Explorer, и другие браузеры при работе со скриптами всё время будут норовить подсунуть устаревшую версию из кэша, так что привыкайте нажимать Ctrl+F5 после внесения изменений. Для скриптов с сессиями приходится и браузер иногда перезапускать, особенно если эти сессии криво реализованы.

9. Дело за MySQL. Если ленитесь искать новые версии, вот Вам одна из моих традиционных: скачать с этой страницы mysql-3.23.33-win.zip (9.6 Мб). Разархивируем, запускаем setup.exe, жмем "Next" во всех окнах. Наверное, всё как надо, можно даже проверить, выполнив программу

C:\mysql\bin\winmysqladmin.exe

При первом запуске она (точней, он, Admin же) попросит ввести User name и Password, давайте введем значения root и root в обоих случаях и нажмем "ОК". Winmysqladmin очень любит прятаться в системном трее и болтаться там в виде значка со светофором. Делаем на этом значке "Show me", видим кучу вкладок с настройками, которые лучше не трогать, пока не разберетесь.

А пока что можно закрыть эту прогу и подумать о том, что работа с базами данных в любом случае будет неудобна без какой-то оболочки.

10. Такая оболочка существует, и её даже не нужно ставить как приложение. Просто разверните архив PHPMyadmin.2.3.0.zip (945 Кб) в папку

c:\Inetpub\wwwroot\phpmyadmin

Потом набираем в браузере

http://127.0.0.1/phpmyadmin

и - ура-ура! - всё работает.

Правда, внизу правого фрейма может появиться красное предупреждение Директива $cfg['PmaAbsoluteUri'] должна быть установлена в Вашем конфигурационном файле!

Откроем файл config.inc.php из папки phpMyAdmin'а, найдем там директиву

$cfg['PmaAbsoluteUri'] = '';

и заменим её на

$cfg['PmaAbsoluteUri'] = 'http://127.0.0.1/phpmyadmin/';

Сохраняем изменённый файл, нажимаем Ctrl+F5 в браузере - всё отлично.

11. Перед созданием новой базы всегда бывает полезно подумать о кодировке. Я бы выбрал в правом фрейме Language=Russian (ru-win1251). Теперь давайте откроем в левом фрейме базу с именем test. Она пуста. Что ж, сделаем к ней SQL-запрос, создающий какую-нибудь таблицу и попробуем скриптом записать чего-нибудь в эту таблицу.

Нажимаем в правом фрейме ссылку SQL, потом кнопку "Обзор" и показываем на предварительно сохраненный файл с именем test.sql и следующим содержимым:

create table data (
 id int primary key auto_increment,
 title varchar(80),
 message text
);

После выполнения запроса в базе данных test появилась таблица с именем data и тремя полями - автоматическим счётчиком записей, заголовком сообщения и его телом.

12. Напишем простейший скрипт на PHP, который будет использовать нашу таблицу. Чтобы не изобретать велосипед, возьмем готовый файл с именем db.php, содержащий функции для интерфейса с базой данных и разместим его в папке

c:\Inetpub\wwwroot\test

- то есть, будем привыкать по-человечески создавать для каждого скрипта отдельную папку.

Ниже приводится листинг файла db.php.

<?

if (!isset($conid)) {

 function dbconnect() {
  $mysql=mysql_connect("localhost", "root", "root"); //хост, логин, пароль
  mysql_select_db("test"); //имя базы данных
  return $mysql;
 }

 function dbquery ($sql){
  $result=mysql_query($sql,get_conid());
  return $result;
 }

 function dbfetcha ($result){
  if ($row=mysql_fetch_assoc ($result)) return $row;
  else return false;
 }

 function dbfetch ($result){
  if ($row=mysql_fetch_array($result)) return $row;
  else return false;
 }

 function dbrows ($result){
  $num=mysql_num_rows($result);
  return $num;
 }

 function dbfree ($result){
  mysql_free_result($result);
 }

 function dbclose ($conid) {
  mysql_close(get_conid());
 }

 function get_conid () {
  static $conid=0;
  if ($conid==0) $conid=dbconnect();
  return $conid;
 }

 get_conid ();
}
?>

Обратите внимание на тело функции dbconnect(), использующей все ранее введенные нами имена и пароли.

Теперь напишем основной код, он представлен ниже, а сохранить его нужно в той же папке скрипта под именем index.php.

<?
 //Раздел служебных функций:
 function magic($path){
  if( ini_get('magic_quotes_sybase')=='1'){ 
   $path=str_replace('""','"',$path);
   $path=str_replace("''","'",$path);
  }
  else {
   if(@get_magic_quotes_gpc()=='1'){ 
    $path=str_replace('\\"','"',$path);
    $path=str_replace("\\'","'",$path);
    $path=str_replace("\\\\","\\",$path);
   }
  } 
  return $path;
 }

 //Подключение функций БД:
 require_once ("db.php");
 //Формирование верхней части страницы:
 print '<html><head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>Демо</title></head>
  <body bgcolor="#E5E5E5" text="#000000" link="#006699" vlink="#5493B4">
 ';

 //Список допустимых параметров - имена из форм и переменные скрипта:
 $params = array('title'=>'title','message'=>'message');
 //Получение параметров через GET и/или POST:
 while(list($var, $param) = @each($params)) {
  if (!empty($_POST[$param]) || !empty($_GET[$param])) 
   $$var = (!empty($_POST[$param])) ? 
    trim(htmlspecialchars(magic($_POST[$param]))) : 
    trim(htmlspecialchars(magic($_GET[$param])));
  else $$var = '';
 }
 if (!empty($title) and !empty($message)) { //Нужные параметры непусты?
  //Добавить сообщение в базу:
  $sql = 'insert into data (title,message) values ("'.$title.
   '", "'.$message.'")';
  $result = dbquery($sql) or die (mysql_error());
 }
 //Вывод формы для добавления сообщений:
 print '
 <form action="index.php" method="post">
  <p>Заголовок: <input type=text size=40 maxlength=80 name=title value="'.
   $title.'"></p>
  <p>Сообщение: <textarea name=message rows=6 cols=72>'.
   $message.'</textarea></p>
  <p><input type=submit value="Добавить">
 </form>
 ';
 //Получить и показать все имеющиеся записи БД:
 $sql = "select * from data order by id desc"; 
  //Сортируем по номеру записи в обратном порядке
 $result = dbquery($sql) or die (mysql_error());
 if ($result and dbrows($result)) { //Если есть непустой результат,
  while ($data = dbfetcha($result)) { //то пока есть записи,
   print '<p><b>'.$data['title'].'</b>: '; //вывести заголовок
   print $data['message'].'</p>'."\n"; //и сообщение с переводом строки
  }
 }
?>

Функция magic(), в сочетании со стандартными для PHP trim() и htmlspecialchars() обеспечивает корректную реакцию скрипта на служебные для HTML и PHP символы ', ", <, > в полях формы.

Получился своего рода небольшой "чат", куда может писать кто угодно и сколько угодно. Разумеется, в реальной базе данных такого допускать нельзя. Тем не менее, этот скрипт будет работать и на настоящем хостинге, если закачать его туда через FTP.

А запустить наш скрипт локально можно через URL

http://127.0.0.1/test

P.S. Если сервис MySQL не стартует автоматически - проверить Администрирование, Службы, найти в списке MySQL. Тип запуска нужно поменять на "Авто".

  Лаура Томсон, Дюк Веллинг. Разработка Web-приложений на PHP и MySQL - рекомендуемая книга (*.pdf, 63 Мб, скачать со страницы архив php-book)

 Все примеры из книги в архиве *.zip - скрипты из книги выше, разбитые по главам (624 Кб, скачать с этого сайта)

Все Web-технологии одним файлом - Apache, CSS, HTML, JavaScript, MySQL, Perl, PHP, 2 универсальных - всего 9 (в архиве *.chm, 20 Мб, скачать со страницы архив web.zip)

Рейтинг@Mail.ru

вверх гостевая; E-mail