Что мы имеем :
Centos 5.2 (бесплатный аналог Red Hat Enterprise Linux 5.2), СУБД Oracle 10.2, в качестве веб-сервера Apache 2.2. Если Apache устанавливается на другом сервере, то на нем нужно установить клиента Oracle 10.2.
Будем считать, что СУБД Oracle или клиент уже установлены на сервер. Единственное что надосделать, так получить nobody доступ к его директории. Для Oracle 10.2 существует скрипт $ORACLE_HOME/install/changePerm.sh.
Что нам необходимо :
Apache 2.2.11 http://httpd.apache.org/download.cgi
PHP 5.2.9 http://www.php.net/downloads.php
Mod_perl 2.0.4 http://perl.apache.org/download/index.html
DBI 1.607 http://www.perl.com/CPAN/modules/by-category/07_Database_Interfaces/DBI/
DBD-Oracle 1.22 http://www.perl.com/CPAN/modules/by-category/07_Database_Interfaces/DBD/
Установка Apache
Скачайте httpd-2.2.11.tar.bz2 с сайта производителя, зайдите под root'ом и выполните следующие команды:
- Код: выделить все
# tar -jxvf httpd-2.2.11.tar.bz2
# cd httpd-2.2.11
# ./configure --prefix=/u01/app/apache --enable-module=so --enable-info --enable-ssl
# make
# make install
При настройке веб-сервера опция --enable-module=so позволяет php и mod_perl быть общим динамическим объектом(Dynamic Shared Object, DSO).
--prefix=/u01/app/apache - каталог установки apache
--enable-info - модуль информации о сервере, можно не включать
--enable-ssl - поддержка SSL, так сервер будет использоваться для доступа сторонних организаций через Интернет. О том, как правильно настроить SSL, написано в статьях
http://www.webscript.ru/stories/04/05/29/2604693, копия лежит http://www.opennet.ru/base/sec/ssl_cert.txt.html
Запуск и остановка Apache
Перед запуском необходимо в конфигурационном файле httpd.conf в директории программы необходимо изменить параметры перенесите корень дерева документов:
- Код: выделить все
RootDocument /var/www/html
<Directory "/var/www/html">
AllowOverride None
Order allow,deny
Allow from all
</Directory>
И определить пользователя и группу от имени которого запускаются
процессы
- Код: выделить все
User apache
Group apache
Далее создаем скрипт следующего содержания для запуска, называем его apache:
- Код: выделить все
#!/bin/sh
# chkconfig: 345 99 10
export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32
if [ ! -f /u01/app/apache/bin/apachectl ]
then
echo "Apache startup: cannot start"
exit
fi
case "$1" in
'start')
/u01/app/apache/bin/apachectl start
;;
'stop')
/u01/app/apache/bin/apachectl stop
;;
Esac
переменные окружения указанные в файле нужны для работы PHP и mod_perl
- Код: выделить все
export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32
Делаем исполняемым
- Код: выделить все
chmod +x apache.
Помещаем в /etc/rc.d/init.d
- Код: выделить все
# chmod +x apache
# cp apache /etc/rc.d/init.d
# /etc/rc.d/init.d/apache start
Необходимо проверить работу Apache с помощью любого веб-браузера. Напишите в адресной строке http://" " " <;IP адрес сервера>/.
Если на файерволе нет ограничений, то тестовая страница должна открыться.
Теперь остановите веб-сервер и можно приступить к конфигурации php:
- Код: выделить все
# /etc/rc.d/init.d/apache stop
Установка PHP
Загрузите файл php-5.2.9.tar.bz2 со страницы разработчика
- Код: выделить все
# tar -jxvf php-5.2.9.tar.bz2
# cd php-5.2.9
# export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
# export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
# export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32
# ./configure --with-apxs2=/u01/app/apache/bin/apxs --with-oci8=$ORACLE_HOME \
--with-config-file-path=/u01/app/apache/conf --enable-sigchild --prefix=/u01/app/php --with-zlib
# make
# make install
Копирум конфигурационный файл:
- Код: выделить все
# cp php.ini-recommended /u01/app/php/php.ini
Смотрим, чтобы в конфигурационном файле http.conf были прописаны
строчки:
- Код: выделить все
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php .cgi
PHPIniDir "/u01/app/php"
Запускаем apache
- Код: выделить все
# /etc/rc.d/init.d/apache start
Тестирование Apache и PHP с Oracle
Для тестирование PHP с Oracle необходимо поместить php файл в htdocs директорию /var/www/html.
Вот два файла. Первый используется для тестирования php. Откройте его в браузере: http://" " " <;IP адрес сервера>/phpinfo.php. Если php установлен, вы увидите полный список конфигурации этого модуля.
phpinfo.php:
- Код: выделить все
<?php phpinfo(); ?>
Проверьте в первой таблице в строчке Configure Command в параметре
--with-oci8 должен быть указан путь к ORACLE_HOME. В таблице OCI8,
должна быть строчка OCI8 Support - enable.
oci8test.php
Второй файл запрашивает системное время используя, подключение к СУБД Oracle
- Код: выделить все
<?php
$dbuser = ""; // имя пользователя СУБД
$dbpass = ""; // пароль пользователя
$dbname = ""; // TNS имя базы
$sql = "select sysdate from dual";
if ($c = OCILogon($dbuser, $dbpass, $dbname)) {
$s = OCIParse($c, $sql);
OCIExecute($s, OCI_DEFAULT);
if (OCIFetch($s)) {
echo "Текущее время" . ociresult($s, 1);
}
OCILogoff($c);
} else {
$err = OCIError();
echo "Oracle Connect Error " . $err[text];
}
?>
Установка поддержки формирования таблиц Excel и их разработка осуществляется через расширение PHP - PEAR. Которые описаны в статье http://www.phpclub.ru/detail/article/Excel_Writer . В этой статье подробно рассмотрен данный вопрос и добавить к этому нечего.
- Код: выделить все
Установка mod_perl
Загружаем с сайтов разработчиков файлы
- Код: выделить все
DBI-1.607.tar.gz
DBD-Oracle-1.22.tar.gz
mod_perl-2.0-current.tar.gz
# tar -zxvf DBI-1.607.tar.gz
# cd DBI-1.607
# perl Makefile.PL
# make
# make test
# make install
# tar -zxvf DBD-Oracle.tar.gz
# cd DBD-Oracle
# perl Makefile.PL
# make
# make install
# tar -zxvf mod_perl-2.0-current.tar.gz
# cd mod_perl-2.0.4
# perl Makefile.PL MP_APXS=/u01/app/apache/bin/apxs
# make
# make install
Открываем httpd.conf добавляем туда строчки
- Код: выделить все
LoadModule perl_module modules/mod_perl.so
PerlOptions +Parent
PerlSwitches -I/var/www/pcgi
Alias /pcgi/ /var/www/pcgi/
<Directory "/var/www/pcgi">
SetHandler perl-script
PerlResponseHandler ModPerl::RegistryPrefork
PerlOptions +ParseHeaders
Options +ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
LoadModule - загрузка модуля perl
PerlOptions +Parent дает возможность использовать отдельный компилятор со своей средой (для этого требуется multi-threaded версия perl).
PerlSwitches -I/var/www/pcgi добавляет указанную папку в @INC компилятора (отдельного для этого VH).
Alias дает псевдоним для пути /pcgi/, который мы будем использовать для обращения к скриптам с mod_perl.
Далее определяем опции для спевдонима /pcgi (для mod_perl-скриптов). Первые три инструкции стандартны для mod_perl директорий: мы указываем
SetHandler (обработчик) как perl-script, PerlResponseHandler как ModPerl::RegistryPrefork (собственно, это главная инструкция, мы используем именно RegistryPrefork), PerlOptions добавляет опцию автоматической обработки заголовков скриптов (теоретически, их можно не печатать). Options +ExecCGI еще разрешаем выполнение скриптов в по этому пути.
Рестартуем "Апач"
Для тестирования mod_perl и Oracle Вам необходимо поместить файлы в /var/www/pcgi директорию.
Файл printenv выводит переменные окружения
- Код: выделить все
print "Content-type: text/plain; charset=iso-8859-1\n\n";
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}
Файл ora_test выводит текущую дату обращаясь к Оракл
- Код: выделить все
print "Content-type: text/html; charset=win1251\n\n";
use strict;
use DBI;
my $dbh = DBI ->connect
( 'dbi:Oracle:orabase', 'user', 'password',
{RaiseError => 1,
AutoCommit => 0} );;
my $sql = qq{ SELECT sysdate FROM dual };
my $sth = $dbh->prepare( $sql );
$sth->execute();
while ( my($sysdate) = $sth->fetchrow_array) {
printf ("%s ", $sysdate );
print "\n";
}
$dbh->disconnect();
оrabase - TNS имя базы берется в tnsnames.ora
user - имя пользователя базы
password - пароль пользователя базы.
Если все выполнено правильно, то все должно работать иначе смотрим логии Апача и разбираемся.



, что часто начинающие, используя windows-клиент, получают в ответ на запросы кракозябли .... Это проблема с кодировкой на стороне клиента Oracle и исправляется она просто - нужно изменить установленный в реестре параметр NLS_LANG вразделе HKLM/Software/Oracle на значение AMERICAN_AMERICA.CL8MSWIN1251 .
Будет время - тоже отпишусь в этом разделе немного:).