linux php oracle?docker安装oracle

大家好,今天来为大家分享linux php oracle的一些知识点,和docker安装oracle的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

php,jsp,asp三者优缺点...

php优点

1.跨平台,性能优越,跟Linux/Unix结合别跟Windows结合性能强45%,并且和很多免费的平台结合非常省钱,比如LAMP(Linux

/Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)结合,或者数据应用够大可以考虑换

PostgreSQL或者Oracle,支持N种数据库。(N>=10)

2.语法简单,如果有学习C和Perl的很容易上手,并且跟ASP有部分类似。有成熟的开发工具,比如NuPHPed,或者Zend

Studio等等,再Linux平台下可以使用Eclipse等等。

3.目前主流技术都支持,比如WebService、Ajax、XML等等,足够应用。

4.有比较完整的支持,比如使用ADODB或者PEAR::DB做数据库抽象层,用Smarty或者smarttemplate做模板层,如果是PHP

5.1的话,还能够使用PDO(PHPDataObject)来访问数据库。

5.有很多成熟的框架,比如支持MVC的框架:phpMVC,支持类似ASP.net的事件驱动的框架:Prado,支持类似RubyOn

Rails的快速开发的框架:Cake等等,足够满足你的应用需求。

6.PHP5已经有成熟的面向对象体系,能够适应基本的面向对象要求。适合开发大型项目。

7.有成熟的社区来支持PHP的开发。

8.

目前已经很多大型应用都是使用PHP,比如淘宝网、Yahoo、163、Sina等等大型门户,很多选用PHP来作为他们的开发语言,所以大型门户都能够选用它,我想足够能够你的使用了。

9.有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有Zend

Framework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客

WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。

php缺点

1.对多线程支持不太好,大多数时候我们只能简单的模拟去实现的。

2.语法不太严谨,比如变量不需要定义就可以使用,在c,java,c++中变量是必须先定义以后才可以使用的。

3.也许有经验的PHP程序员最感到痛苦的地方是PHP的解释运行机制。这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量,还是类的静态成员,都会在页面执行完毕后被清空。以JSP为例,在JSP中,Java

Bean的scope有四种有效值:Page、Application、Session、Request,分别对应页面、程序、会话、请求四种生存期。但在PHP中,只有Page一种生存期。

JSP的优势

(1)一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改。

(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易见的。

(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。

(4)多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。

JSP的劣势

(1)与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。

(2)

Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面,它还需要硬盘空间来储存一系列的。java文件和。class文件,以及对应的版本文件。

ASP的特点:

1、任何开发工具皆可发展ASP

只要使用一般的文书编辑程序,如Windows记事本,就可以编辑。当然,其他网页发展工具,例如,FrontPageExpress、

FrontPage等也都可以;不过还是建议你用记事本来写,既省钱又方便,若是使用那些所见即所得的网页编辑来写ASP,可能会发生一些意想不到的离奇状态。

2、通吃各家浏览器

由于ASP程序是在网络服务器端中执行,执行结果所产生的HTML文件适用于不同的浏览器。

3、语言相容性高

ASP与所有的ActiveXScript语言都相容,除了可结合HTML,VBScript、JavaScript、Active

X服务器组件来设计外,并可经由“plug-In(外挂组件模组)的方式,使用其他厂商(ThirdParty)所提供的语言。

4、隐密安全性高

如果我们在浏览器中直接查看网页的原始代码,就只能看到HTML文件,原始的ASP程序代码是看不到的!这是因为ASP程序先于网站服务(Web

Server)端执行后,将结果转换成标准HTML文件,再传送到客户端(Client)的浏览器上,因此,我们所辛苦撰写的ASP程序并不会轻易地被看见进而被盗用。

5、易于操控数据库

ASP可以轻易地通过ODBC(OpenDatabase

Connectivity)驱动程序连接各种不同的数据库,例如:Acess、Foxpro、dBase、Oracle等等,另外,ASP亦可将“文本文件”或是”Excel”

文件当成数据库用。

6、面向对象学习容易

ASP具备有面向对象(Object-Oriented)功能,学习容易,ASP提供了五种方便能力强大的内建对象:Request、Response、Sever、Application以及Session,同时,若使用ASP内建的“Application”对象或”Session”对象所撰写出来的ASP程序可以在多个网页之间暂时保存必要的信息。

如何在 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是否正常执行了。

阅读剩余
THE END