一. 準備工作
要實現將Linux/Apache/PHP4/FastCGI/Oracle/MySQL環境整合,必需先準備好以下軟體包:
(一)資料庫教程的Perl介面
1.perl5的Oracle資料庫DBI驅動程式:DBD-Oracle-1.03.tar.gz
2.perl5的通用資料庫介面程式:DBI-1.13.tar.gz
3.perl5的MySQL資料庫DBI驅動程式:Msql-Mysql-modules-1.2209.tar.gz
(二)Oracle資料庫
4.Oracle 8iR2(8.1.6) for Linux安裝盤:oracle8161.tar.gz
(三)MySQL資料庫
5.MySQL 3.22.32伺服器程式包:MySQL-3.22.32-1.i386.rpm
6.MySQL用戶端程式包:MySQL-client-3.22.32-1.i386.rpm
7.MySQL開發包(標頭檔/庫檔案):MySQL-devel-3.22.32-1.i386.rpm
8.MySQL共用庫程式包:MySQL-shared-3.22.32-1.i386.rpm
(四)Apache伺服器
9.Apache 1.3.12源碼教程包:apache_1.3.12.tar.gz
(五)PHP模組
10.PHP 4.0.0源碼包:php教程-4.0.0.tar.gz
(六)FastCGI模組
11.FastCGI模組源碼包:mod_fastcgi_2.2.4.tar.gz
12.FastCGI的perl開發模組:FCGI-0.53.tar.gz
二. 安裝Oracle用戶端
由於Oracle 8.1.6是在XWindows下安裝的,所以必須是事先配置好XWindow,如果你的顯卡不支援XWindow,也可以用exceed進行遠程安裝(這裡不提遠程如何安裝)。
在此簡單列出操作過程:
(一)設定環境變數:
在/etc/profile中加入:
export ORACLE_HOME=/opt/oracle8i/u01
export ORACLE_BASE=/opt/oracle8i
export ORACLE_OWNER=oracle
export ORACLE_SID=ORCL
export ORACLE_TERM=ansi
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280"
(二)建立oracle組和使用者
#/usr/sbin/groupadd dba
#/usr/sbin/useradd -g dba oracle
#/usr/bin/passwd oracle
(三)建立$ORACLE_HOME目錄
#mkdir /opt
#mkdir /opt/oracle8i
#mkdir /opt/oracle8i/u01
#chown -R oracle.dba /opt
(四)安裝reacle 8iR2
以oracle使用者登入,解開Oracle安裝包:
$tar zxvf oracle8161.tar.gz
$startx 啟動XWindow介面,並開啟一個rxvt終端視窗
$cd Oracle8iR2
$./runInstaller
此時出現Oracle安裝介面,在安裝時選擇安裝client/Application User(如果Oracle伺服器不在本機上運行,另有專用機器),安裝完畢後配置SQL*Net8並測試連接遠程伺服器通過即可。
三. 安裝MySQL伺服器和用戶端
以root身分進入,安裝MySQL各個包:
#rpm -ivh MySQL-3.22.32-1.i386.rpm
#rpm -ivh MySQL-client-3.22.32-1.i386.rpm
#rpm -ivh MySQL-devel-3.22.32-1.i386.rpm
#rpm -ivh MySQL-shared-3.22.32-1.i386.rpm
四. 安裝Perl的資料庫介面模組
以root身分進入,然後執行:
#tar zxvf DBI-1.13.tar.gz
#cd DBI-1.13
#perl Makefile.PL
#make
#make test
#make install
#cd ..
#rm -rf DBI-1.13
#
#tar zxvf DBD-Oracle-1.03.tar.gz
#cd DBD-Oracle-1.03
#perl Makefile.PL
#make
#make test
#make install
#cd ..
#rm -rf DBD-Oracle-1.03
#
#tar zxvf Msql-Mysql-modules-1.2209.tar.gz
#cd Msql-Mysql-modules-1.2209
#perl Makefile.PL
選擇1(MySQL)和y(支援Mysql.pm)
#make
#make test
#make install
#
五. 安裝Apache+PHP+FastCGI
(一)解開Apache/PHP/FastCGI包:
#tar zxvf apache_1.3.12.tar.gz
#tar zxvf php-4.0.0.tar.gz
#tar mod_fastcgi_2.2.4.tar.gz
(二)編譯PHP4
配置apache編譯參數
#cd apache_1.3.12
#./configure --prefix=/usr/local/apache
配置PHP編譯參數
#cd ../php-4.0.0
#./configure --with-apache=../apache_1.3.12
> --with-mysql教程
> --with-oracle=$ORACLE_HOME
> --with-oci8=$ORACLE_HOME
> --enable-track-vars
編譯PHP模組:
#make
#make install
建立php.ini參數檔案
#cp php.ini-dist /usr/local/lib/php.ini
#cd ..
(三)添加FastCGI模組:
#mv mod_fastcgi_2.2.4 apache_1.3.12/src/modules/fastcgi
(四)編譯安裝Apache
#cd apache_1.3.12
配置編譯參數
#./configure --prefix=/usr/local/apache
> --activate-module=src/modules/php4/libphp4.a
> --activate-module=src/modules/fastcgi/libfastcgi.a
編譯Apache
#make
安裝Apache
#make install
(五)關閉原有系統內建的Apache
#/etc/rc.d/init.d/httpd stop
(六)配置Apache自身參數:
1.編輯/usr/local/apache/conf/httpd.conf檔案,修改以下參數:
ServerName host.mydomain.name
DocumentRoot "/home/httpd/html"
Options Indexes FollowSymLinks MultiViews Includes
AllowOverride None
Order allow,deny
Allow from all
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
AllowOverride None
Options None
Order allow,deny
Allow from all
DirectoryIndex index.html index.phtml index.php index.htm index.shtml index.fcgi
2.修改自啟動連結
#cd /etc/rc.d/init.d
#ln -fs /usr/local/apache/bin/apachectl httpd
(七)配置PHP4.0參數:
1.修改/usr/local/apache/conf/httpd.conf檔案,修改以下參數:
增加一行:AddType application/x-httpd-php .php .phtml .php3
2.修改/usr/local/apache/bin/apachectl指令碼,使啟動支援中文ORACLE環境:
在檔案中66行("start)")下面加入幾行:
export ORACLE_HOME=/opt/oracle8i/u01
export ORACLE_BASE=/opt/oracle8i
export ORACLE_SID=ORCL
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280"
3.修改/usr/local/apache/conf/srm.conf以在CGI程式中使用環境變數:
PassEnv ORACLE_HOME
PassEnv ORACLE_BASE
PassEnv LD_LIBRARY_PATH
PassEnv NLS_LANG
PassEnv ORACLE_SID
PassEnv PATH
(八)配置FastCGI執行環境:
1.修改/usr/local/apache/conf/httpd.conf檔案,修改以下參數:
增加幾行:
############ FastCGI Configures Begin ##########################
AddHandler fastcgi-script .fcg .fcgi .fpl
SetHandler fastcgi-script
Order deny,allow
Allow from all
Options ExecCGI Indexes Includes
############### FastCGI Configure End ###########################
2.建立fcgi的執行目錄
#mkdir /home/httpd/html/fcgi
3.安裝FCGI的Perl運行模組:
#tar zxvf FCGI-0.53.tar.gz
#cd FCGI-0.53
#perl Makefile.PL
#make
#make install
六.啟運並測試
1.啟動Apache伺服器:
#/etc/rc.d/init.d/httpd start
2.編寫PHP測試程式:
第一個測試程式:/home/httpd/html/t1.php;
第二個測試PHP與Oracle串連的PHP程式(表已經建好):查看是否為中文輸出;
第三個測試PHP與MySQL串連的PHP程式(表已經建好)。
3. 編寫FastCGI的測試代碼: /home/httpd/html/fcgi/test.fcgi
#!/usr/bin/perl
use FCGI;
use DBI;
$dbname="oracle";
$user="user";
$passwd="password";
$dbh="";
while(FCGI::accept()>=0) {
&parse_form();
$id=$FORM{"id"};
$para=$FORM{"para"};
print "Content-type: text/html ";
print " ";
if (!$dbh){
print "no oracle, need to connect ";
$dbh = DBI->connect("dbi:Oracle:$dbname",$user,$passwd);
}else{
print "OK, oracle aleady connected ";
}
$sth=$dbh->prepare("select name from testtable where id=15");
$sth->execute;
@recs=$sth->fetchrow_array;
$sth->finish;
print "參數id=".$id." and my name is @recs[0] ";
print "參數para=".$para." ";
}
####傳入參數處理部分#######
sub parse_form {
my($buffer);
my($pairs);
my(@pairs);
my($name);
my($value);
my $meth = $ENV{"REQUEST_METHOD"};
if ($meth eq "GET" || $meth eq "HEAD") {
$buffer = $ENV{"QUERY_STRING"};
}
elsif ($meth eq "POST") {
read(STDIN, $buffer, $ENV{"CONTENT_LENGTH"});
}
undef %FORM;
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s///g;
if ($allow_html != 1) {
$value =~ s/]| )*>//g;
}
$FORM{$name} = $value;
}
}