The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Установка Apache 2, PHP 5, mod_perl 2 в связке с Oracle 10.2 (oracle database linux apache perl php)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: oracle, database, linux, apache, perl, php,  (найти похожие документы)
From: Межецкий Алексей <absz@yandex.ru.> Newsgroups: email Date: Mon, 30 Jun 2009 17:02:14 +0000 (UTC) Subject: Установка Apache 2, PHP 5, mod_perl 2 в связке с Oracle 10.2 Работая в одной компании, я столкнулся с тем, что нужно было реализовать безопасный web-доступ сторонним организациям к данным, находящимся внутри сети этой компании. В качестве СУБД использовалась Oracle. Проект нужно было реализовать, как говорится, "вчера", плюс, зная из опыта, отчеты лучше было формировать в таблицы Excel, с соответствующим форматированием и формулами, которые коммерсанты компании доделывают сами и не дергают программистов, т.к. то, что и как им нужно они сами иногда не знают. Более полноценной поддержки и описания формата Excel чем в PHP я не нашел, если кто знает, например в perl, или других языках, напишите. В интернете можно было найти множество рекомендаций, по связке "Apache+PHP+mod_perl+Oracle", но, как правило, они уже устарели, поэтому, перелопатив информацию в Интернете и документацию на указанные выше продукты, решил написать данную статью. Итак, пройдемся по порядку, в качестве сервера используется 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, копия лежит https://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 - пароль пользователя базы. Если все выполнено правильно, то все должно работать иначе смотрим логии Апача и разбираемся.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Anatoli (??), 23:13, 04/01/2010 [ответить]  
  • +/
    Hi Алексей,

    Thank you for the good article.
    If you are still interested in working with Excel
    from Perl, let me know (tolq@yahoo.com) and I'll
    send you all info you need.

    Thank you,
    Anatoli

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру