PHP и IIS, пример работы с базой данных
В данной статье Мы раскажем как
установить PHP на Microsoft IIS, и
рассмотрим простой пример
"Форум", работа с базой данных
(Microsoft Access) через драйвер ODBC.
Установка PHP
Скачиваем последнюю версию PHP под
Windows c http://www.php.net,
распаковываем на диск С:\ и
переименовываем папку в PHP.
Открываем файл С:\PHP\PHP.INI-DIST
Раскоментируем строку
;cgi.force_redirect = 1
И заменим на
cgi.force_redirect = 0
Сохраним этот файл как PHP.INI в
системный каталог C:\WINNT.
Настройка IIS для работы с PHP
Открываем консоль управления IIS
Пуск -> Настройка -> Панель
управления -> Администрирование
-> Internet Information Service:
На позиции "default web site" нажимаем правую кнопку мыши и выбираем "Свойства"
Выбираем закладку "Домашний
каталог" и нажимаем на кнопку
"Настройка"
В закладке "Сопоставления"
нажимаем кнопку "Добавить"
Указываем что расширение .php
обрабатывать интерпретатором
c:\php\php.exe
После чего IIS настроен на обработку
php страниц.
Проверка работоспособности PHP
Для проверки в любом редакторе создаем файл test.php
<? phpinfo(); ?> |
Функция phpinfo(); выводит на экран
текущие настройки PHP, а также
информацию о сервере и переменных,
операционной системе, HTTP заголовки,
лицензионное соглашение.
Файл test.php нужно сохранить в каталог
C:\INETPUB\WWWROOT
Затем в обозревателе набрать
http://localhost/test.php
Если Вы сделали все правильно, то
увидите на экране:
Делаем форум.
В Microsoft Access создайте базу данных Forum и в ней таблицу Forum со следующей структурой:
Имя поля | Тип данных |
code | Счетчик |
parentcode | Числовой |
title | Текстовый |
description | Текстовый |
uname | Текстовый |
Текстовый |
Code - Уникальное автоинкрементное поле, Parentcode - количество вложений, Title, description, uname и email - поля форума.
Создаем системный источник (DSN) В
ODBC, для этого открываем:
Пуск -> Настройка -> Панель
управления -> Администрирование
-> Источники данных (ODBC):
Выбираем закладку "Системный
DSN" и добавляем источник
"forum", драйвер - Microsoft Access driver
(*.mdb)
В нем выбираем базу данных forum.mdb.
Note! Во время создания DSN база данных должна быть закрытой, иначе Вы получите сообщение об ошибке.
Дальше, Вам нужно будет создать два PHP файла (forum.php и node.php) и поместить их в папку C:\INETPUB\WWWROOT.
Файл forum.php
|
Файл note.php
|
Note! Если у Вас раздел NTFS Вам
нужно добавить доступ на запись в
файл forum.mdb для пользователя
Интернет гость (IUSR_<имя
компьютера>)
Если при добавлении в форум у Вас
будет возникать ошибка "Operation must
use an updateable query", это означает что
нехватает прав на запись.
Если Вы хотите подключать через
ODBC другие базы данных, например Dbase,
XLS, текстовые файлы:
То вам нужно будет изменить
переменную $connect в зависимости от
настроек. К многим SQL серверам (MySQL,
PostgreSQL, Oracle) в PHP есть встроенные
функции подключения.
Синтаксис PHP функции odbc_connect
odbc_connect (string dsn, string user, string password [, int cursor_type])
Возвращает id ODBC-соединения, 0 (FALSE)
при ошибке.
id соединения, возвращаемый этой
функцией, необходим для других
ODBC-функций. Вы можете иметь
одновременно открытыми несколько
соединений. Необязательный
четвёртый параметр устанавливает
тип курсора, используемый для этого
соединения. Обычно этот параметр не
нужен, но может использоваться при
решении проблем с некоторыми
драйверами ODBC.
Некоторые ODBC-драйверы,
выполняющие сложные хранимые
процедуры, могут завершаться с
ошибкой: "Cannot open a cursor on a stored procedure
that has anything other than a single select statement in
it". Использование SQL_CUR_USE_ODBC
поможет избежать появления этой
ошибки.
Также некоторые драйверы не
поддерживают необязательный
параметр row_number parameter в odbc_fetch_row(). И
SQL_CUR_USE_ODBC может помочь в этом
случае.
Для типа курсора определены следующие константы:
Дополнение к IIS 6.0
Как выяснилось для того чтобы поставить PHP на IIS 6.0 тоесть на 2003 сервер, нужно выполнить в дополнение всему написанному несколько телодвижений.
Заходим в "Internet Information Services
Manager", Выбираем название
компьютера Далее "Web services
extensions".
Здесь регистриуем PHP приложение:
Для этого жмем "Add a new web service
extensions"
В файле PHP.INI обязательно
определяем переменную:
doc_root = "c:\inetpub\wwwroot"
Корень для PHP файлов.
Для NTFS незабываем проверить права
для каталога
c:\inetpub\wwwroot - Где находится Веб сайт.
Для пользователей: IUSR_<имя
компьютера>, IIS_WPG
Права на чтение и выполнение.
Я не писал выше что нужно
скопировать библиотеки (.dll) из
каталога c:\php\dlls в системную
C:\WINNT\SYSTEM32 и прописать в PHP.INI
extension_dir = "c:\php\extensions"
Это так-же остается и для IIS 5.x.
Перезапуск IIS, но не перезапуск самого сайта и все готово :)
Проблемы с ODBC и встроенные функции (extensions) PHP для подключения к базам данных:
По правде сказать я никогда не
встречал проблем именно с ODBC за
исключением наличия самого
драйвера. Например до сих пор
помоему нет драйвера ODBC для Paradox.
Если у кого-то возникают проблемы с
ODBC напишите подробнее, можно мне на
Email или здесь в статье, я
обязательно посмотрю в чем прична.
Этот пример подключения через
драйвер ODBC был взят специально,
всвязи с простым использованием.
Ненужно менять синтаксис программы
если Вы возмете не Access, как в
примере, а например DBF или XLS. На
сегодня драйверы ODBC существуют
почти ко всем современным базам
данных. Единственное что можно
сказать в минус ODBC так это его
скорость, но большинству не нужно
обрабатывать гигабайтные базы
данных, а, например, для форумов,
гостевых книг, регистраций и многим
другим маленьким программам это
вполне подходит.
Если заглянуть в C:\PHP\EXTENSIONS то Мы
увидим встроенные библиотеки
подключения к базам данных, Вот
стандартная поставка PHP 4.3.2 из
названий видно к чему они
относятся:
php_db.dll php_dba.dll php_dbase.dll php_dbx.dll php_domxml.dll php_interbase.dll php_ldap.dll php_msql.dll php_mssql.dll php_oracle.dll php_pgsql.dll - Необходима дополнительная библиотека libpq.dll php_sybase_ct.dll
Все это тестировалось и работало
на версии "PHP 4.3.2" и "IIS 5.1" и
"IIS 6.0".
Переменная: register_globals = Off подробнее
про переменные.
Написал: Konstantin Petrenko