Linux下配置PHP5连接Oracle 10.2.0

发布于: 2008年06月16日

按惯例,必须先本地安装Oracle,至少是Oracle Client, 最好是全部服务器程序。安装Oracle 不在本文讨论范围。另外本文假设安装Oracle 10.2.0 全部服务器程序。

首先,编译安装PHP, 必须增加一条“–with-oci=/path/to/oracle”, 下面是我的PHP编译完整命令:

'./configure' '--prefix=/opt/php5' '--with-config-file-path=/opt/php5' '--with-bz2' '--with-exec-dir=/usr/bin/' '--with-curl' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-gd=shared' '--enable-gd-native-ttf' '--with-xml' '--with-jpeg-dir=/usr' '--with-openssl' '--with-zlib' '--with-pear=/usr/share/pear' '--with-mysql=shared,/usr' '--with-apxs2=/usr/sbin/apxs' '--with-oci8=/oracle/product/10.2.0'

其次,修改apache文件,识别oracle path。其中apache 识别php不再赘述。可以修改apache 的启动文件apachectl,找到下面文字
# |||||||||||||||||||| START CONFIGURATION SECTION ||||||||||||||||||||
# -------------------- --------------------
#
# the path to your httpd binary, including options if necessary
HTTPD='/usr/sbin/httpd'

在下面添加
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/product/10.2.0/
export PATH=$PATH:$ORACLE_HOME/BIN:
export LD_LIBRARY_PATH=/oracle/product/10.2.0/lib:$LD_LIBRARY_PATH

重启apache

最后,测试。写一个php 测试脚本,我的脚本如下:
检查phpinfo页面, 应该会有下面的文字

oci8

OCI8 Support enabled
Version 1.2.5
Revision $Revision: 1.269.2.16.2.43 $
Active Persistent Connections 0
Active Connections 0
Oracle Version 10.1
Compile-time ORACLE_HOME /oracle/product/10.2.0
Libraries Used no value
Temporary Lob support enabled
Collections support enabled

表示php 已经正查支持OCI8模块了。但并不保证能正查连接Oracle,只是说OCI8相关的函数可以使用而已。
//PHP连接Oracle函数
function php_conn_ora(){
$username='your username';
$passwd='your password';
$protocol='TCP';
$SERVICE_NAME='you service_name or SID';
$ORACLE_SERVER_IP_ADDRESS='your oracle ip';
$Port='1521';
PutEnv("NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8");
if(!$conn = oci_pconnect($username, $passwd, "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = $protocol)(HOST = $ORACLE_SERVER_IP_ADDRESS)(PORT = $Port)) ) (CONNECT_DATA = (SERVICE_NAME = $SERVICE_NAME) ) )")) echo("Error in Connecting to DataBase");
return $conn;
}
//Query 函数
function ora_query($sql){
global $conn_ora;
$result=oci_parse($conn_ora,$sql);
oci_execute($result,OCI_DEFAULT);
return $result;
}
//Echo 环境变量
$ORACLE_HOME = getenv("ORACLE_HOME");
echo "ORACLE_HOME=$ORACLE_HOME
\n";
$LD_LIBRARY_PATH = getenv("LD_LIBRARY_PATH");
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH
\n";
$PATH = getenv("PATH");
echo "PATH=$PATH
\n";
//连接测试
$conn_ora=php_conn_ora();
$sql="select * from sometable where rownum<=2";
$result=ora_query($sql);
oci_fetch_all($result,$array);
echo "<pre>";
var_dump($array);
echo "</pre>";

通过浏览器访问上面的脚本文件,如果一切正常,至少会有正常的环境变量结果输出,还有你的数据查询结果:

ORACLE_HOME=/oracle/product/10.2.0
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
PATH=/usr/kerberos/sbin:/oracle/product/10.2.0/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/oracle/bin
//下面省略数据查询结果

异常处理:
这种事情一般很难一蹴而就,经常会有这样那样的问题。下面是我碰到过的情况:
测试页面包含下面提示文字:

...OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME is set and points to the right directory...

解决办法:
1.检查测试脚本的环境变量输出是否正常。如果为:

ORACLE_HOME=
NLS_LANG=
PATH=

表示执行apache服务的用户没有得到正确环境变量。建议的解决办法是,将上面写入apachectl文件的文字:
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/product/10.2.0/
export PATH=$PATH:$ORACLE_HOME/BIN:
export LD_LIBRARY_PATH=/oracle/product/10.2.0/lib:$LD_LIBRARY_PATH

写道/etc/init.d/httpd文件试试,可以写到下面文字之后
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

2.如果上面的显示正常,请检查oracle安装目录是否能为执行apache服务的用户读取。如果没有,请执行

chmod a+r /path/to/oracle

本文为寻找人生的起点(http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 http://blog.cn-ic.org/?p=94。

javascript: style.color 获取结果跟浏览器相关

发布于: 2008年06月15日

网页的元素可以通过“style“来改变字体,字体大小,和颜色。比如
<input type='text' id='test' name='test' value='Test text' style='font-family:Arial;font-size:12px;color:#FF0000'>

网页中也可以通过javascript 改变style的各种属性,如:

<script>
document.getElementById("test").style.fontFamily = "宋体";
document.getElementById("test").style.fontSize = "14px";
document.getElementById("test").style.color = "#00FF00";
</script>

于是,我们也可以取得已经定义的style各属性的结果

<script>
var getFontFamily = document.getElementById("test").style.fontFamily ;
var getFontSize= document.getElementById("test").style.fontSize = "14px";
var getFontColor= document.getElementById("test").style.color= "#00FF00";
</script>

在实践中发现, IE 和 Firefox 在返回style.color属性的时候, 结果是不一样的。
IE 会老老实实的返回:#FF0000
而Firefox 会返回这样:rgb(255, 0, 0)

唉, javascript 的浏览器兼容问题永远都不会停止麻烦我啊。

本文为寻找人生的起点(http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 http://blog.cn-ic.org/?p=93。

Nokia 的手机还是可以的

发布于: 2008年06月10日

这是一款相当平民的手机,不知道在公元2008-6-10的今天,还有多少人用黑白屏的手机,至少我和MM都在用。手机的型号是Nokia 1112.

故事从MM忘记把手机拿出裤子口袋开始…

那个忘记拿出口袋的手机在洗衣机里翻滚了40分钟才被我们记起来。

接着就被拿到太阳底下曝晒。几个小时后,尝试开机。无反应。

挺朋友说,也许需要用吹风机。于是吹了一会儿,再尝试开机,居然开始有反应了。但是显示“Contact Service”。

顿时来了信心,继续吹…   可以正常开机了,而且能接入和播出电话,能听到对方的声音,但是出不去声音

吹风机此时成了灵丹妙药,继续…  可以出去声音了

继续…  可以有按键声音了

虽然对恢复手机使用信心倍增,但总不能忘记在水里翻滚了40分钟的事实。按照一般扬声器的震动片用纸做的原理(或许不是,但是扬声器的小孔里面的水还是没有信心是否能被我驱除赶紧),扬声器永久报废了;充电部分功能也坏掉了。如果使用外部充电器的话,加上震动功能尚可使用,这个手机还是可以再用一段时间的。但是我们还没有拮据到这个地步,鉴于Nokia 手机如此可靠,决定花个300米再去买一个同系列的,也许是1116

瑾以此文纪念我们的老手机,并为Nokia 做一次免费宣传。

今天是我的幸运日

发布于: 2008年05月23日

我相信今天是我的幸运日,并非因为我今天驾校文化考试得了97分。一个老大不小的人了,才去考取驾照,本身就是十分丢人的事情,而且根据现在60分万岁的原理,如果我要炫耀,我应该拿90分。

我相信今天是我的幸运日是因为今天晚上6点开始到7:30的90分钟电话粥,打得我耳朵发烫,手机没电。谁没有煲过电话粥,老大不小了,也不会因为一通电话粥而春心荡漾。是啊,因为那不是一通电话,而是3通,平均每通半个小时。

一个大学同学,一个高中同学,一个大学同学的前女友–哥们关系(为拒绝误会,特加注解,撇清关系)。一通接一通,我不的匆忙挂断前面一通来接后一通。被人记得的感觉真好。

漂泊在外,为自己的生计忙碌,虽然心里时常挂念,但提起电话的时机老是要等到特别成熟才行,而成熟的时机总是很少。我是这样,我想我的朋友们也是这样。而如今有3个朋友不约而同的认为今天是给我电话的好时机,如果不是神的眷顾,那么就是一个对我来说非常特殊的日子?

我问第三通电话的那位–大学同学的前女友–:今天是不是我的生日。

她诧异的想了一下,老实的回答:不好意思,我不记得你的生日。

好吧,我承认神眷顾我了。虽然神没有在4800点的时候拒绝我进入股市,但是至少还想着我,我非常高兴 。我一定会经常给我的朋友,我的家人,我自己,一些成熟的时机以示报答的。因为我知道接到老同学老朋友的电话,总会让我们的话匣子无法关闭。人在社会,总会被迫改变一些自己,能有机会展示一下心里原来的自己的感觉非常没有。相信所有的朋友都是如此。

朋友在电话里说:前段时间跟那些鬼一起打麻将,发现他们都还是老样子。

是啊,谁会没有改变。只是大家都在渴望原来纯真的自己。

2008-5-19 全国哀悼日

发布于: 2008年05月19日

今天早上来到办公室,打开邮箱不久便收到了昨晚就已经知道的消息。

为表达全国各族人民对四川汶川大地震遇难同胞的深切哀悼,国务院决定,2008年5月19日至21日为全国哀悼日。在此期间,全国和各驻外机构下半旗志哀,停止公共娱乐活动,外交部和我国驻外使领馆设立吊唁簿。5月19日14时28分起,全国人民默哀3分钟,届时汽车、火车、舰船鸣笛,防空警报鸣响。
根据国务院公告,请各事业群、各所属企业:
一、“哀悼日”期间下半旗志哀;
二、停止一切集体娱乐活动;
三、认真组织自5月19日(今天)14时28分起的默哀活动。
请集团全体员工:
一、 对四川汶川大地震遇难同胞表达深切哀悼;
二、 遵守国务院全国哀悼日的有关规定。
特此通知!

注:已经隐去公司名称和落款

下午14:27,公司广播进行了一个简短的发起默哀的广播:
如果你正在走路,请停下你前进的步伐,
如果你正在办公,请起立
如果你正在说话,请稍停片刻
如果你正在操作无法停止运转的机器,请在心中为灾区人民祝福
……

办公室顿时静默,所有人都站了起来,没有人说话,空气顿时凝固了。
14:28,防空警报准时响起

小时候去烈士陵园扫墓,默哀3分钟是一个很漫长的过程。但是今天,没有想到3分钟的默哀可以过得如此迅速
防空警报在14:31停止了,大家都默默的坐了下来。但是静默的气氛并没有停止,一直延续到之后的10分钟以后,也许是大家的祝福并没有停止吧。

神州大地遭受如此灾难,我相信今天中国的大部分人都在为四川,为汶川的人民祝福,真心的祝福。

solidot被黑or水产

发布于: 2008年05月13日

2008-5-13 16:00PM左右,正常浏览solidot.org。但是一分钟之后,刷新页面时,主页被重定向到http://solidot.org/CHCN/index.asp.htm页面,MS变成了AMD中文官方站。

被黑?可能性很小 ,如果细细察看新页面的话,外部入侵的痕迹基本没有。也可能是我个小菜鸟看不到。 比较大的可能是由于敏感新闻,被和谐了。域名仍然可以访问,也许是给zdnet面子,zdnet也是无奈弃子吧。

这种可能并非无端猜测,因为我当时看到的主页第二篇文章是谴责我们的zf地-震-网-站形同虚设。也许在这个当口,干这个事情并不明智。

希望是我的猜测错了,希望只是网站例行维护,希望solidot早日回归。

本文为寻找人生的起点(http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 http://blog.cn-ic.org/?p=85。

浙ICP备18056264号-1