php oracle linux?Oracle系统
大家好,关于php oracle linux很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于Oracle系统的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
红帽子linux5.0倒7.0的发展
1997年12月,Red Hat Linux 5.0发布,它支持Intel、alpha和Sparc平台和大多数的应用软件。极其简单易用的RPM模块化的安装、配置和卸载工具,使程序的安装可在15分钟内完成。软件升级也很方便,这对刚开始使用Linux的用户来说是一大福音。
2003年4月,Red Hat Linux 9.0发布。重点放在改善桌面应用方面,包括改进安装过程、更好的字体浏览、更好的打印服务等。统计表明,2003年,Red Hat的 Linux市场份额为86%。
2004年4月30日,Red Hat公司正式停止对Red Hat 9.0版本的支持,标志着Red Hat Linux的正式完结。原本的桌面版Red Hat Linux发行包则与来自民间的Fedora计划合并,成为Fedora Core发行版本。Red Hat公司不再开发桌面版的Linux发行包,而将全部力量集中在服务器版的开发上,也就是Red Hat Enterprise Linux版。 2005年10月RHEL4发布。
2007年3月,主流版本RHEL5发布。
2010年4月RHEL6 BETA测试版发布。
RedHat Enterprise Linux 6.0
2011年04月12日 Oracle发布的Linux系统6.0(基于RedHat Enterprise Linux 6.0)
2011年11月10日,RHEL 6正式版发布。新版带来了一个完全重写的进程调度器和一个全新的多处理器锁定机制,并利用NVIDIA图形处理器的优势对GNOME和KDE做了重大升级,新的系统安全服务守护程序(SSSD)功能允许集中身份管理,而SELinux的沙盒功能允许管理员更好地处理不受信任的内容。RHEL 6内置的新组件有GCC 4.4(包括向下兼容RHEL 4和5组件)、OpenJDK 6、Tomcat 6、Ruby 1.8.7和Rails 3、PHP 5.3.2与Perl 5.10.1,数据库前端有PostgreSQL 8.4.4, MySQL 5.1.47和SQLite 3.6.20。
如何在 Oracle Linux 上使用 PHP DTrace
DTrace是一个受欢迎的、“总是可用”的跟踪实用程序,用于识别开发和生产系统中的性能和行为问题。适用于 Oracle Linux的标准“UEK3”内核包括了 DTrace支持。通过跟踪 PHP核心和 PHP OCI8扩展中的用户探测器,我们可以有效地识别 PHP脚本问题。DTrace让您可以跟踪用户应用程序与操作系统之间的交互。
在 Oracle Linux上,DTrace实用程序需要一个 Oracle Unbreakable Linux Network(ULN)订阅。
安装 Oracle Linux和 Oracle Unbreakable Enterprise Kernel版本 3
首先,通过 Oracle E-Delivery安装 Oracle Linux 6.4。
安装 Oracle Linux 6.4之后,确保在 ULN中启用了“Unbreakable Enterprise Kernel Release 3 for Oracle Linux 6(x86_64)- Latest”频道。安装 UEK3内核:
# yum install kernel-uek
在 ULN中启用“Oracle Linux 6 Dtrace Userspace Tools(x86_64)- Latest”频道,安装 DTrace实用程序:
# yum install dtrace-utils
重新引导到新的 UEK3 3.8.13内核。
安装 PHP
需要使用--enable-dtrace参数构建 PHP。您可以安装一些启用了 DTrace的预先构建的评估版 RPM,请参见“使用 Oracle Linux“playground”预构建软件包的 DTrace PHP”。
也可以按照如下所述重新构建 PHP:
从 php.net下载 PHP 5.4.20或 PHP 5.5.4或更高版本,然后进行解压缩:
$ tar-xJf php-5.4.20.tar.bz2
$ cd php-5.4.20
配置 PHP:
$./configure\
--prefix=$HOME/p54\
--enable-dtrace\
--disable-all--disable-cgi\
--with-pear--enable-xml--enable-libxml--with-zlib
这将构建一个启用了 DTrace的最小的命令行 PHP。所有不需要的扩展均被禁用。您可根据需要包含其他扩展。
--prefix选项表示安装到一个本地目录,方便您查看安装的文件。用完快照之后,清理该目录很容易。
pear、xml和 zlib选项允许使用 pecl命令。
生成 PHP二进制文件并进行安装:
$ make
$ make install
将 php.ini-development复制到$HOME/p54/lib/php.ini,编辑该文件来设置时区,例如:
date.timezone= America/Los_Angeles
安装适用于 Oracle Database的 PHP OCI8
评估版 PHP RPM包括可以连接到 Oracle Database的 OCI8扩展;请参见前面提到的博文。
不过,如果您自己编译 PHP,需要手动将 PHP OCI8作为一个“共享的”扩展添加:
在 ULN上启用“Oracle Software for Oracle Linux 6(x86_64)”频道。
以 root用户身份安装 Oracle Instant Client:
# yum install oracle-instantclient12.1-basic oracle-instantclient12.1-devel
作为普通用户,设置 PHP的 PATH:
$ export PATH=$HOME/p54/bin:$PATH
如果需要访问 ,请设置一个 PEAR代理:
$ pear config-set http_proxy
设置用来启用 DTrace的环境变量 PHP_DTRACE,然后安装 PHP OCI8:
$ PHP_DTRACE=yes pecl install oci8-2.0.2
本文后面将要用到的 DTrace探测器定义基于 PHP OCI8 2.0.2,因此需要安装明确的版本。如果您要安装更高的版本,请查看探测器及其参数,了解最新版本中的小改进。
当提示 ORACLE_HOME目录时,无需输入文本,直接按 Return。安装将自动检测 Oracle Instant Client RPM。配置将继续,输出将包含类似下面的内容:
[... ]
checking for Oracle Database OCI8 support... yes, shared
checking PHP version... 5.4.20, ok
checking OCI8 DTrace support... yes
[... ]
configure: WARNING: OCI8 extension: ORACLE_HOME is not set,
looking for default Oracle Instant Client instead
checking Oracle Instant Client directory...
/usr/lib/oracle/12.1/client64/lib
checking Oracle Instant Client SDK header directory...
/usr/include/oracle/12.1/client64
checking Oracle Instant Client library version compatibility... 12.1
[... ]
再次编辑 php.ini,添加 PHP OCI8:
extension=oci8.so
确认安装:
$ php--ri oci8
oci8
OCI8 Support=> enabled
OCI8 DTrace Support=> enabled
OCI8 Version=> 2.0.2-dev
Revision=>$Id: b30fb4bef45d9f5ce8a56b736f1546ea0cff08ef$
Oracle Run-time Client Library Version=> 12.1.0.1.0
Oracle Compile-time Instant Client Version=> 12.1
Directive=> Local Value=> Master Value
oci8.max_persistent=>-1=>-1
oci8.persistent_timeout=>-1=>-1
oci8.ping_interval=> 60=> 60
oci8.privileged_connect=> Off=> Off
oci8.statement_cache_size=> 20=> 20
oci8.default_prefetch=> 100=> 100
oci8.old_oci_close_semantics=> Off=> Off
oci8.connection_class=> no value=> no value
oci8.events=> Off=> Off
Statistics=>
Active Persistent Connections=> 0
Active Connections=> 0
PHP OCI8安装说明
为了支持 DTrace,需要从 PECL安装 PHP OCI8 2.0,因为 PHP 5.4和 PHP 5.5包含的 PHP OCI8 1.4没有 DTrace探测器。将来,在 PHP 5.6发布后,您就能够在构建 PHP时配置支持 DTrace的 PHP OCI8。
当然,您可以通过 Oracle Instant Client zip文件安装 PHP OCI8,也可以仅使用现有的 ORACLE_HOME安装。
您可以在不包含或未配置 DTrace的 PHP版本上安装启用 DTrace的 PHP OCI8。这包括 PHP早期版本。您将能够跟踪 PHP OCI8探测器,但无法跟踪核心 PHP探测器。类似地,您可以在启用 DTrace的 PHP上安装禁用 DTrace的 PHP OCI8。
如果您使用 phpize和 configure(而不是 pecl)从 PECL安装 PHP OCI8 2.0,则仍需设置 PHP_DTRACE=yes。这是因为 PECL软件包有限的 configure脚本将忽略--enable-dtrace选项。
PHP OCI8 2.0配置脚本适合“真正的”DTrace使用,但 Linux SystemTap不会跟踪扩展。
注意,DTrace优化后的二进制文件产生的输出可能与我们所见到的代码不尽相同。
验证 PHP DTrace探测器
以 root用户身份启用 DTrace,允许普通用户记录跟踪信息:
# modprobe fasttrap
# chmod 666/dev/dtrace/helper
您可以使用 ACL软件包规则限制特定用户对设备的访问,而非使用 chmod命令。
作为普通用户运行 php,不带任何选项。PHP将启动,然后等待输入:
$ php
以 root用户身份列出可用的 DTrace探测器。列出了 PHP核心探测器和 PHP OCI8探测器:
# dtrace-l-m php-m oci8.so
4 php9559 php dtrace_compile_file compile-file-entry
5 php9559 php dtrace_compile_file compile-file-return
6 php9559 php zend_error error
7 php9559 php ZEND_CATCH_SPEC_CONST_CV_HANDLER exception-caught
8 php9559 php zend_throw_exception_internal exception-thrown
9 php9559 php dtrace_execute_ex execute-entry
10 php9559 php dtrace_execute_internal execute-entry
11 php9559 php dtrace_execute_ex execute-return
12 php9559 php dtrace_execute_internal execute-return
13 php9559 php dtrace_execute_ex function-entry
14 php9559 php dtrace_execute_ex function-return
15 php9559 php php_request_shutdown request-shutdown
16 php9559 php php_request_startup request-startup
17 php9559 oci8.so php_oci_dtrace_check_connection oci8-check-connection
18 php9559 oci8.so php_oci_do_connect oci8-connect-entry
19 php9559 oci8.so php_oci_persistent_helper oci8-connect-expiry
20 php9559 oci8.so php_oci_do_connect_ex oci8-connect-lookup
21 php9559 oci8.so php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-close
22 php9559 oci8.so php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-release
23 php9559 oci8.so php_oci_do_connect oci8-connect-return
24 php9559 oci8.so php_oci_do_connect_ex oci8-connect-type
25 php9559 oci8.so php_oci_error oci8-error
26 php9559 oci8.so php_oci_statement_execute oci8-execute-mode
27 php9559 oci8.so php_oci_create_spool oci8-sesspool-create
28 php9559 oci8.so php_oci_create_session oci8-sesspool-stats
29 php9559 oci8.so php_oci_create_session oci8-sesspool-type
30 php9559 oci8.so php_oci_statement_create oci8-sqltext
PHP手册中详细记载了核心 PHP探测器。PHP OCI8探测器如下所述。
在用户终端,用 Ctrl-C停止 php可执行文件。
$ php
^C
$
PHP OCI8 2.0 DTrace探测器概述
静态 PHP OCI8 2.0探测器可分为“用户”探测器和“维护者”探测器。后者对于 PHP OCI8维护者更有用,可在扩展开发期间验证功能。所有探测器均以参数形式返回数据。官方文档中详细介绍了 PHP OCI8 DTrace探测器。
在 OCI8 2.0.2中,用户探测器包括:
oci8-connect-entry—由 oci_connect()、oci_pconnect()和 oci_new_connect()启动。在建立数据库连接之前触发。
char*username—连接用户名。
char*dbname—数据库连接字符串。
char*charset—指定的字符集。
long session_mode— OCI_SYSDBA(0x2)、OCI_SYSOPER(0x4)和 OCI_CRED_EXT(1<<31)的二进制“或”(或者过去我所使用平台上的-2147483648)。默认情况下,设置为 0。
int persistent—如果调用了 oci_pconnect(),则设置为 1;否则设置为 0。
int exclusive—如果调用了 oci_new_connect(),则设置为 1;否则设置为 0。
oci8-connect-return—在连接的末尾触发。
void*connection—连接结构的地址。
oci8-check-connection—如果 Oracle错误可能已经导致连接失效,则启动。
void*connection—连接结构的地址。
int is_open—如果 errcode或 server_status指示连接无效且必须重新创建,则为 0。
long errcode— Oracle错误编号。
unsigned long server_status—为 Oracle库的一个指示器,指示连接是否无效。如果因为 errcode指示连接无效导致 is_open为 0,则 server_status为其默认值 1。
oci8-sqltext—执行 oci_parse()时启动。
void*connection—连接结构的地址。
char*sql—所执行的 SQL语句的文本。
oci8-error—如果发生 Oracle错误,则启动。
int status— Oracle返回失败的 Oracle库调用的状态,如-1代表 Oracle的 OCI_ERROR,1代表 Oracle的 OCI_SUCCESS_WITH_INFO。请参见 Oracle的 oci.h,了解所有定义。
long errcode— Oracle错误编号。
oci8-execute-mode—指示 oci_execute()调用的提交状态。
void*connection—连接结构的地址。
unsigned int mode—传递给 Oracle库的模式,如 OCI_NO_AUTO_COMMIT(0x00)、OCI_DESCRIBE_ONLY(0x10)或 OCI_COMMIT_ON_SUCCESS(0x20)。
注:最新的 OCI8 2.0.6中包含 oci8-connection-close探测器,有几个探测器现在也具有 client_id参数和指向语句结构的指针。
维护者探测器如下所示。参数描述请参考 PHP OCI8源代码。
oci8-connect-p-dtor-close
void*connection
oci8-connect-p-dtor-release
void*connection
oci8-connect-lookup
void*connection
int is_stub
oci8-connect-expiry
void*connection
int is_stub
long idle_expiry
long timestamp
oci8-connect-type
int persistent
int exclusive
void*connection
long num_persistent
long num_connections
oci8-sesspool-create
void*session_pool
oci8-sesspool-stats
unsigned long free
unsigned long busy
unsigned long open
oci8-sesspool-type
int type
void*session_pool
PHP OCI8 2.0中的探测器代替了 PHP OCI8 1.4中使用的 oci_internal_debug()跟踪。该函数已变成一条空指令,不执行任何操作。
使用 PHP OCI8和 DTrace
执行以下步骤。
创建一个简单的 PHP文件 oci8.php来查询数据库:
<?php
error_reporting(0);
ini_set('display_errors','Off');
function do_query($c,$sql)
{
$s= oci_parse($c,$sql);
if(!$s)
return;
$r= oci_execute($s);
if(!$r)
return;
while(($row= oci_fetch_row($s))!= false){
foreach($row as$item){
echo$item."";
}
echo"\n";
}
}
$c= oci_new_connect('hr','welcome','localhost/pdborcl');
do_query($c,"select city from locations where rownum< 5 order by 1");
do_query($c,"select something from does_not_exist");
?>
创建一个 D脚本 user_oci8.d来探测 oci8.php的执行:
#!/usr/sbin/dtrace-Zs
# This script is for OCI8 2.0.2
php*:::oci8-connect-entry
{
printf("PHP connect-entry\n");
printf("\t username%s\n", arg0? copyinstr(arg0):"");
printf("\t dbname%s\n", arg1? copyinstr(arg1):"");
printf("\t charset%s\n", arg2? copyinstr(arg2):"");
printf("\t session_mode%ld\n",(long)arg3);
printf("\t persistent%d\n",(int)arg4);
printf("\t exclusive%d\n",(int)arg5);
}
php*:::oci8-connect-return
{
printf("PHP oci8-connect-return\n");
printf("\t connection 0x%p\n",(void*)arg0);
}
php*:::oci8-connection-close
{
printf("PHP oci8-connect-close\n");
printf("\t connection 0x%p\n",(void*)arg0);
}
php*:::oci8-error
{
printf("PHP oci8-error\n");
printf("\t status%d\n",(int)arg0);
printf("\t errcode%ld\n",(long)arg1);
}
php*:::oci8-check-connection
{
printf("PHP oci8-check-connection\n");
printf("\t connection 0x%p\n",(void*)arg0);
printf("\t is_open%d\n", arg1);
printf("\t errcode%ld\n",(long)arg2);
printf("\t server_status%lu\n",(unsigned long)arg3);
}
php*:::oci8-sqltext
{
printf("PHP oci8-sqltext\n");
printf("\t connection 0x%p\n",(void*)arg0);
printf("\t sql%s\n", arg0? copyinstr(arg1):"");
}
php*:::oci8-execute-mode
{
printf("PHP oci8-execute-mode\n");
printf("\t connection 0x%p\n",(void*)arg0);
printf("\t mode 0x%x\n", arg1);
}
使用 OCI8 2.0.6,一些参数的数值需要调整,才能满足现在一些新增参数的需要。
以 root用户身份启动 D脚本。该脚本将暂停,等待探测器触发:
# chmod+x user_oci8.d
#./user_oci8.d
(稍后,体验完 PHP之后,可以使用 Ctrl-C关闭此终端。)
在另一个窗口中运行命令行 PHP。显示成功查询的输入:
$ php oci8.php
Beijing
Bern
Bombay
Geneva
在运行 D脚本的 root终端,将显示 PHP执行期间触发的探测器:
#./user_oci8.d
dtrace: script'user_oci8.d' matched 0 probes
CPU ID FUNCTION:NAME
1 18 php_oci_do_connect:oci8-connect-entry PHP connect-entry
username hr
dbname localhost/pdborcl
charset
session_mode 0
persistent 0
exclusive 0
0 23 php_oci_do_connect:oci8-connect-return PHP oci8-connect-return
connection 0x7f64e112cff0
0 31 php_oci_statement_create:oci8-sqltext PHP oci8-sqltext
connection 0x7f64e112cff0
sql select city from locations where rownum< 5 order by 1
0 27 php_oci_statement_execute:oci8-execute-mode PHP oci8-execute-mode
connection 0x7f64e112cff0
mode 0x20
0 31 php_oci_statement_create:oci8-sqltext PHP oci8-sqltext
connection 0x7f64e112cff0
sql select something from does_not_exist
0 27 php_oci_statement_execute:oci8-execute-mode PHP oci8-execute-mode
connection 0x7f64e112cff0
mode 0x20
0 26 php_oci_error:oci8-error PHP oci8-error
status-1
errcode 942
0 17 php_oci_dtrace_check_connection:oci8-check-connection PHP oci8-check-connection
connection 0x7f64e112cff0
is_open 1
errcode 942
server_status 1
0 25 php_oci_connection_close:oci8-connection-close PHP oci8-connect-close
connection 0x7f64e112cff0
(将-q添加到 user_oci8.d的/usr/sbin/dtrace参数将隐藏 CPU和 ID详细信息。)
在多 CPU计算机上,探测器可能不会顺序出现,具体取决于哪个 CPU正在处理探测器。显示探测器时间戳将有助于消除混淆,例如:
php*:::oci8-connect-entry
{
printf("PHP connect-entry at%lld\n", walltimestamp);
}
从 user_oci8.d DTrace输出中,您可以看到以下内容:
发起的连接(oci8-connect-entry)。连接到 localhost/pdborcl数据库的用户 hr。因为 exclusive和 persistent均为 0,所以是一个 oci_connect()调用。未请求任何显式的字符集。请求的是默认的会话模式(oci_connect的第五个可选参数)。
对两条 SQL语句进行分析(oci8-sqltext),并以 0x20(即 OCI_COMMIT_ON_SUCCESS)模式执行(oci-execute-mode)。
生成了(oci8-error)一条 Oracle错误— ORA-942(表或视图不存在)。
该错误导致要验证连接状态(oci8-check-connection)。is_open的值为 1,表示连接正常。
通过这些信息,您可以跟踪有问题的语句执行和连接问题。
总结
DTrace是一个非常强大的实用程序,本文只是有关其用法的只言片语。通过上述示例,可将 PHP OCI8跟踪与核心 PHP跟踪相集成。您可以设置 PHP函数调用的时间,计算调用的次数。您可以深入了解 PHP进行的操作系统调用。Bryan Cantrill在 DTrace和 PHP(演示)中发布了一些核心 PHP跟踪的示例。(注意,博客平台升级导致其博文中的一个反斜杠显示为两个反斜杠。而且,您不再需要单独的 PHP DTrace扩展。)Brendan Gregg的 DTrace Toolkit包含许多有用的 DTrace脚本。还有各种不同的博客。
记住,DTrace的目的是始终启用其功能,适合开发和生产(此过程最需要 DTrace)。DTrace的设计意味着探测器不受监视时零开销。
如何集成Linux、Apache、PHP4、FastCGI、Oracle、MySQL环境
一.准备工作要实现将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驱
一.准备工作
要实现将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共5页。
二.安装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并测试连接远程服务器通过即可。共5页。
三.安装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共5页。
(六)配置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共5页。
六.启运并测试
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;
$para=$FORM;
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;
if($meth eq"GET"||$meth eq"HEAD"){
$buffer=$ENV;
}
elsif($meth eq"POST"){
read(STDIN,$buffer,$ENV);
}
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())/eg;
$value=~ s///g;
if($allow_html!= 1){
$value=~ s/]|)*>//g;
}
$FORM=$value;
}
}
测试看看FastCGI是否正常执行了。