Установка 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 Скачайте http2d-2.2.11.tar.bz2 с сайта производителя, зайдите под root'ом и выполните следующие команды: # tar -jxvf http2d-2.2.11.tar.bz2 При настройке веб-сервера опция --enable-module=so позволяет php и mod_perl быть общим динамическим объектом(Dynamic Shared Object, DSO). --prefix=/u01/app/apache – каталог установки apache --enable-info – модуль информации о сервере, можно не включать --enable-ssl – поддержка SSL, так сервер будет использоваться для доступа сторонних организаций через Интернет. О том, как правильно настроить SSL, написано в статье //www.webscript.ru/stories/04/05/29/2604693, копия лежит //www.opennet.ru/base/sec/ssl_cert.txt.html, не вижу смысла пересказывать текст. Запуск и остановка Apache Перед запуском необходимо в конфигурационном файле http2d.conf в директории программы необходимо изменить параметры перенесите корень дерева документов: RootDocument /var/www/html <Directory
"/var/www/html"> User apache Далее создаем скрипт следующего содержания для запуска, называем его apache: #!/bin/sh переменные окружения указанные в файле нужны для работы PHP и mod_perl export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1export 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 с помощью любого веб-браузера. Напишите в адресной строке //<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 Смотрим, чтобы в конфигурационном файле http2.conf были прописаны строчки: LoadModule
php5_module modules/libphp5.so Запускаем apache # /etc/rc.d/init.d/apache start Тестирование Apache и PHP с Oracle Для тестирование PHP с Oracle необходимо поместить php файл в htdocs директорию /var/www/html. Вот два файла. Первый используется для тестирования php. Откройте его в браузере: //<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. Которые описаны в статье //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 Открываем http2d.conf добавляем туда строчки LoadModule
perl_module modules/mod_perl.so LoadModule – загрузка модуля perl PerlOptions +Parent дает возможность использовать отдельный компилятор со своей средой (для этого требуется multi-threaded версия perl). PerlSwitches -I/var/www/pcgi добавляет указанную папку в @INC компилятора (отдельного для этого VH).
Далее определяем опции для спевдонима /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-1nn"; Файл ora_test выводит текущую дату обращаясь к Оракл print
"Content-type: text/html; charset=win1251nn"; оrabase – TNS имя базы берется в tnsnames.ora user – имя пользователя базы password – пароль пользователя базы. Если все выполнено правильно, то все должно работать иначе смотрим логии Апача и разбираемся. Межецкий Алексей. absz@yandex.ru |