Установка Apache 2+PHP+mod_perl 2 с Oracle 10.2

Установка и конфигурирование

Установка Apache 2+PHP+mod_perl 2 с Oracle 10.2

Сообщение Sysdba » 11 дек 2009, 12:28

В интернете можно найти много рекомендаций, по связке "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, копия лежит 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($sOCI_DEFAULT);
               if (
OCIFetch($s)) {
                   echo 
"Текущее время" ociresult($s1);
               }
               
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 - пароль пользователя базы.

Если все выполнено правильно, то все должно работать иначе смотрим логии Апача и разбираемся.
Единственный способ что-то узнать — это что-то делать.
/Джордж Бернард Шоу/

За это сообщение автора Sysdba поблагодарил:
Berg
Аватар пользователя
Sysdba
Начинающий Web-Мастер
Начинающий Web-Мастер
 
Сообщений: 205
Зарегистрирован: 25 фев 2009, 11:25
Благодарил (а): 3 раз.
Поблагодарили: 2 раз.
Блог (статьи): Просмотреть
Пункты репутации: 3
Sysdba doesn't have reputation

Установка Apache 2+PHP+mod_perl 2 с Oracle 10.2

Сообщение Sysdba » 11 дек 2009, 15:24

А вот еще рабочий вариант для Apache, PHP и Oracle Oracle Database 10g Express Edition на Linux

В этом примере мы будем используется Red Hat Enterpise Linux AS 4.0.

Необходимый софт ( указаны версии на которые ставились, но не думаю что будут большие отличия с другими версиями):
Oracle Database 10g Express Edition 10.2
Apache HTTP Server 2.0.58
PHP 5.2.9

Установка Oracle

Скачайте пакет Express Edition (в простонародье просто "XE") RPM (Для пользователей Debian/Ubuntu также доступны .deb пакеты.), залогинетесь под root'ом и выполните:
Код: выделить все
# rpm -ivh oracle-xe-univ-10.2.0.1-1.0.i386.rpm

После установки пакета, сконфигурируйте базу данных, запустив ее и ответив на вопросы:
Код: выделить все
# /etc/init.d/oracle-xe configure


Запуск и остановка Oracle

Oracle XE будет запущен после установки. Для администрирования вам необходимо ввести в браузере http://имя_хоста:8080/
имя_хоста - если оракл установлен локально то будет localhost, если удаленно, то имя удаленного хоста.
Примечание: возможно вам потребуется заменить localhost на 127.0.0.1.
Используйте имя пользователя "SYSTEM" и пароль, введенный вами в процессе установки.

Если потребуется перезапустить базу данных, используйте Start Database и Stop Database в меню Oracle Database 10g Express Edition.
Для запуска потребуется добавить себя в группу dba и вновь зайти в систему.

В качестве альтернативы можно вызвать oracle-xe скрипт под рутом:
Код: выделить все
# /etc/init.d/oracle-xe stop

Для перезапуска:
Код: выделить все
# /etc/init.d/oracle-xe start


Установка сервера Apache.

После установки oracle можно перейти к установке Apache.
Очень важно установить именно его перед установкой php.
Скачайте например версию httpd-2.0.58.tar.bz2 с сайта производителя, зайдите под root'ом и выполните следующие команды:
Код: выделить все
# tar -jxvf httpd-2.0.58.tar.bz2
# cd httpd-2.0.58 # ./configure --prefix=/usr/local/apache --enable-module=so
# make
# make install

При настройке веб-сервера опция --enable-module=so позволяет php быть общим динамическим объектом(Dynamic Shared Object, DSO).

Если вы знакомы с командой tar вы будете удивлены, почему не требуется bunzip2 для извлечения файлов. Linux включает GNU версию команды tar, которая имеет новый флаг j для автоматического извлечения файлов из bzipped архивов. Если вы скачали gzipped архив, то можете использовать флаг z.

Запуск и остановка Apache

Эти действия выполняются посредством скрипта apachectl:
Код: выделить все
# /usr/local/apache/bin/apachectl start

Проверить работу Apache можно с помощью любого веб-браузера. Напишите в адресной строке http://localhost/" " " " " ".

Теперь остановите веб-сервер:
Код: выделить все
# /usr/local/apache/bin/apachectl stop

и можно приступить к конфигурации php.

Установка PHP

Если вы не хотите мучаться с компиляцией php, используйте пакет Zend Core for Oracle и следуйте следующим инструкциям.
Иначе- загрузите файл php-5.2.9.tar.bz2 со страницы производителя.
Пошаговая установка PHP:

1) Войдите под пользователем root и выполните эти команды:
Код: выделить все
# tar -jxvf php-5.2.9.tar.bz2
# cd php-5.2.9
# export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
# ./configure
--with-oci8=$ORACLE_HOME
--with-apxs2=/usr/local/apache/bin/apxs
--with-config-file-path=/usr/local/apache/conf
--enable-sigchild
# make
# make install

Примечание: если вы используете фаерволл, то перед командой make install вам потребуется установить http_proxy в соответствии с настройками сети.

2) Скопируйте файл настроек:
Код: выделить все
# cp php.ini-recommended /usr/local/apache/conf/php.ini

Для тестирования полезно открыть php.ini и установить display_errors=On, тогда вы увидите проблемы в вашем коде.

3) Добавьте в файл конфигурации Apache следующий код:
Код: выделить все
#
# This next section will call PHP for .php, .phtml, and .phps files
#
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php-source .phps
#
# This is the directory containing php.ini
#


PHPIniDir "/usr/local/apache/conf" Если стоки модуля загрузки не включены, добавьте их тоже:
Код: выделить все
LoadModule php5_module modules/libphp5.so

Рестартаните Apache
Это необходимо для проверки работы php:
Код: выделить все
# /usr/local/apache/bin/apachectl start


Примечание: если вы используете Oracle 10.2, но не Express Edition, вам необходимо получить nobody доступ к его директории.
Для Oracle 10.2.0.2 существеут скрипт $ORACLE_HOME/install/changePerm.sh.

При возникновении ошибок, они будут отображены на экране. Их можно найти в /usr/local/apache/logs/error_log. При возникновении проблем, проверьте httpd.conf и php.ini с последующей корректировкой.

При запуске Apache по крайней мере нужно определить ORACLE_HOME. Любые другие переменный должны быть определены перед запуском веб-сервера. Эта и многие другие переменный устанавливаются с помощью скриптов $ORACLE_HOME/bin/oracle_env.sh or the /usr/local/bin/oraenv.

Чтобы все упростить, можно создать скрипт для запуска Apache. Назовем его start_apache:
Код: выделить все
#!/bin/sh
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export ORACLE_HOME
echo "Oracle Home: $ORACLE_HOME"
echo Starting Apache
/usr/local/apache/bin/apachectl start


Тестирование Apache и PHP с Oracle

Тестирование PHP с Oracle осуществляется очень просто. Вам всего-навсего необходимо поместить php файл в htdocs директорию, обычно находящуюся по /usr/local/apache/htdocs.

Вот два файла. Первый используется для тестирования php. Откройте его в браузере: http://localhost/phpinfo.php" " " " " " .
Если php установлен, вы увидите полный список конфигурации этого модуля.

Фвйл phpinfo.php
Код: выделить все
<?php phpinfo(); ?>


Проверьте это в секции oci8.

oci8test.php

Второй файл позволит отображать имена и жалования сотрудников, входящих в HR группу пользователей. Это требует HR схемы установки, иначе придется изменить сценарий. Схема HR идет в комплекте с Oracle XE. Вы можете открыть общий доступ и установить пароли при помощи раздела администрирования.

Этот файл использует стиль функции PHP4, названной ocilogon. В PHP5 имена были стандартизированы, например, oci_connect, но старые названия тоже в силе.

Для баз данных Oracle XE строка соединения: //127.0.0.1/XE. Если вы используете Oracle XE, то измените эту строку(третий параметр) в соответствии с вашей базой данных.
Код: выделить все
<?php
    $db_conn 
ocilogon("hr""your_hr_password""//127.0.0.1/XE");
    
$cmdstr "select last_name, salary from employees";
    
$parsed ociparse($db_conn$cmdstr);
    
ociexecute($parsed);
    
$nrows ocifetchstatement($parsed$results);
    echo 
"<html><head><title>Oracle PHP Test</title></head><body>";
    echo 
"<center><h2>Oracle PHP Test</h2><br>";
    echo 
"<table class=borderall cellspacing='0' width='50%'>\n<tr>\n";
    echo 
"<td><b>Name</b></td>\n<td><b>Salary</b></td>\n</tr>\n";
    for (
$i 0$i $nrows$i++ )
    {
        echo 
"<tr>\n";
        echo 
"<td>" $results["LAST_NAME"][$i] . "</td>";
        echo 
"<td>$ " number_format($results["SALARY"][$i], 2). "</td>";
        echo 
"</tr>\n";
    }
    echo 
"<tr><td colspan='2'> Number of Rows: $nrows</td></tr></table>";
    echo 
"<br><em>If you see data, then it works!</em><br></center></body></html>\n";
?>



Замечание: если у Вас не установлены необходимые переменные окружения, поместите следующие строки в начале каждого скрипта, работающего с Oracle:

Код: выделить все
<?php  PutEnv("ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server");  ?>


Если возникает ошибка "Call to undefined function: ora_logon()/ ocilogon()", то вероятнее всего, у Вас не включена поддержка Oracle.
Вернитесь к вопросу сборке PHP. Вам необходимо пересобрать php, если у Вас Linux или раскомментировать загрузку соответствующей библиотеки, если у вас Windows.

Заключение: Теперь у нас есть Oracle, Apache и PHP. И мы можем приступать к написанию своих приложений.
Единственный способ что-то узнать — это что-то делать.
/Джордж Бернард Шоу/
Аватар пользователя
Sysdba
Начинающий Web-Мастер
Начинающий Web-Мастер
 
Сообщений: 205
Зарегистрирован: 25 фев 2009, 11:25
Благодарил (а): 3 раз.
Поблагодарили: 2 раз.
Блог (статьи): Просмотреть
Пункты репутации: 3
Sysdba doesn't have reputation

Установка Apache 2+PHP+mod_perl 2 с Oracle 10.2

Сообщение Berg » 11 дек 2009, 18:13

Хорошая подборка мануалов :good:
От себя добавлю :), что часто начинающие, используя windows-клиент, получают в ответ на запросы кракозябли .... Это проблема с кодировкой на стороне клиента Oracle и исправляется она просто - нужно изменить установленный в реестре параметр NLS_LANG вразделе HKLM/Software/Oracle на значение AMERICAN_AMERICA.CL8MSWIN1251 .
Кстати интресный раздел подняли :). Изначально хотел его развивать тоже. Забылось как-то в рутине работ ... :( Будет время - тоже отпишусь в этом разделе немного:).
Помогите Microsoft в борьбе с пиратскими версиями Windows — установите своим друзьям Linux! :)
Аватар пользователя
Berg
Модератор
Модератор
 
Сообщений: 616
Зарегистрирован: 30 окт 2008, 00:11
Откуда: Тьмутаракань :)
Благодарил (а): 4 раз.
Поблагодарили: 3 раз.
Блог (статьи): Просмотреть
Пункты репутации: 8
Berg doesn't have reputation

Установка Apache 2+PHP+mod_perl 2 с Oracle 10.2

Сообщение Berg » 23 дек 2009, 16:01

Еще один момент..., после установки Oracle Database XE и Oracle APEX, Listener слушает 127.0.0.1 адрес на 8080 порту, но при попытке постучаться снаружи отклика нет. Это можно изменить :)
Чтобы поставить только локальный доступ HTTP Access:
Код: выделить все
  exec dbms_xdb.setListenerLocalAccess(l_access => TRUE);

Чтобы разрешить удаленный доступ HTTP Access:
Код: выделить все
  exec dbms_xdb.setListenerLocalAccess(l_access => FALSE);
Помогите Microsoft в борьбе с пиратскими версиями Windows — установите своим друзьям Linux! :)
Аватар пользователя
Berg
Модератор
Модератор
 
Сообщений: 616
Зарегистрирован: 30 окт 2008, 00:11
Откуда: Тьмутаракань :)
Благодарил (а): 4 раз.
Поблагодарили: 3 раз.
Блог (статьи): Просмотреть
Пункты репутации: 8
Berg doesn't have reputation

Установка Apache 2+PHP+mod_perl 2 с Oracle 10.2

Сообщение Sysdba » 25 дек 2009, 15:40

Спасибо за решение вопроса с кодировкой :). Как раз искал .
Единственный способ что-то узнать — это что-то делать.
/Джордж Бернард Шоу/
Аватар пользователя
Sysdba
Начинающий Web-Мастер
Начинающий Web-Мастер
 
Сообщений: 205
Зарегистрирован: 25 фев 2009, 11:25
Благодарил (а): 3 раз.
Поблагодарили: 2 раз.
Блог (статьи): Просмотреть
Пункты репутации: 3
Sysdba doesn't have reputation


Вернуться в Установка и конфигурирование



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron