CentOS7部署php+apache+oracle

(原谅我是linux小白,之间在家里搭开发环境都是在windows下面,很方便,这次因为要跟单位里的linux环境相同,尝试着搭一个linux环境,结果折腾了一天一夜,技艺不精啊。)

Oracle是原来就安装好的,在windows7宿主机上。

然后windows7安装virtual box,然后安装了最新的64位CentOS7。

设置虚拟机的桥接网络就用了前半夜,后来不知道怎么就自己好了。

已经不记得是怎么弄的了,估计下次再装虚拟机再设桥接还是会有问题。

下半夜才开始部署php+apache开发环境。

CentOS选择了全部安装。所以装完之后apache(httpd)和php就有了。

修改一下DocumentRoot(etc/httpd/conf/httpd.conf),放一个phpinfo.php,直接能运行了。

(注意,httpd关于php的设置在这里:/etc/httpd/conf.d/php.conf)

当然,一开始用我的另外笔记本浏览,80端口不通;用root修改CentOS的防火墙设置。

设完后,80端口通了,但是打开html可以,但是打开php报403错误,研究了一下,是SELinux在捣鬼。

关了SELinux,重启虚拟机,笔记本网页可以打开虚拟机上的php了。


然后去Oracle下载了oracle12c的64位client

解压,按照docs.google.com上的官方文档进行安装。文档很长很详细,记不太住了,最主要是先建好oinstall组和oracle用户。

用图形界面安装,一开始还碰到oracle universal installer界面乱码问题,网上搜问题,找到一个方法:

在图形安装前export LC_CTYPE=en_US.iso88591

然后执行图形界面安装就不是乱码了。 安装过程跟在windows上是基本一致的。

一开始会检验到几个包没有,就用安装光盘挂载镜像,然后在package找到相应包直接安装。

全都安装完后,再次执行oracle client图形界面安装,顺利完成。

设置tns,sqlplus测试,到主机上的数据库连接成功。

接着,写个test.php,里面用oci_connect()测试一下,报函数不存在,看来是oci8包没有。

找到/etc/php.ini,有一段内容:

;;;;
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.

;;;;

到/etc/php.d目录下,没有oci的ini,估计没有安装oci8的extension

按照网上的方法和《Underground PHP and Oracle Manual》这本书,我直接简单粗暴的用pecl install oci8命令在线安装了oci8

(虚拟机桥接后有自己的IP,通过家里的路由器上互联网)

安装时又报错,缺少phplevel什么的(不记得是不是这个名字了),然后再简单粗暴的用yum install安装phplevel

然后再pecl install oci8(过程中会要求你指定oracle_home,注意安装前先停止apache)

装完之后,在/etc/php.d中增加一个oci8.ini,里面写extension=oci8.so

完了,重启apache,网页打开test.php,报错:

Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories in/www/htdocs/test.php on line 5

Warning
: oci_connect(): Error while trying to retrieve text for error ORA-01804 in/www/htdocs/test.php on line 5

easy,不就是环境变量没设么,在/etc/profile里加一下export ORACLE_HOME=XXX export LD_LIBRARY_PATH=XXX

加完之后,root重新签到,重启apache,在命令行里用php test.php执行,显示连接数据库成功,然后浏览器打开test.php

然后是这个报错!

Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories in/www/htdocs/test.php on line 5

Warning
: oci_connect(): Error while trying to retrieve text for error ORA-01804 in/www/htdocs/test.php on line 5

蛋疼啊。

整个下半夜都在网上搜这是什么问题。

先是改apache的用户,httpd.conf改User和Group,不行。

在httpd.conf加setenv,不行;按网上的说明用PassEnv,也不起作用。

网上找了好久好久都没找到解决方法,还有按照《Underground PHP and Oracle Manunal》的书,

在/etc/sysconfig/httpd增加:

export ORACLE_HOME=/oracle/product/12.1.0/client_1
export LD_LIBRARY_PATH=/oracle/product/12.1.0/client_1/lib:$LD_LIBRARY_PATH

还是解决不了问题。

凌晨3点了,先睡觉。

第二天(今天),再尝试一些方法,再搜索一些问题。

最后去看apache的error log,发现有这么两行:

[Sun Dec 21 14:54:17.506549 2014] [env:warn] [pid 23077] AH01506: PassEnv variable ORACLE_HOME was undefined
[Sun Dec 21 14:54:17.506566 2014] [env:warn] [pid 23077] AH01506: PassEnv variable LD_LIBRARY_PATH was undefined

PassEnv是我用在httpd.conf里的(

PassEnv  ORACLE_HOME

PassEnv LD_LIBRARY_PATH

虽然知道了是apache没获取到ORACLE_HOME和LD_LIBRARY_PATH的环境变量值,但是注意到phpinfo显示的environment只有

Environment

VariableValue
PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
LANGC
NOTIFY_SOCKET@/org/freedesktop/systemd1/notify
KRB5RCACHETYPEnone 

没有Oracle_home和LD。当然是没有的。

然后去查看apachectl的内容,发现一段:

if [ -r /etc/sysconfig/httpd ]; then
   . /etc/sysconfig/httpd
fi

说明/etc/sysconfig/httpd文件还是有用的。然后突然意识到environment里LANG的值C就是在/etc/sysconfig/httpd文件里设置的,

只不过设置方法是:LANG=C,没有export

然后我立马改了/etc/sysconfig/httpd文件,把ORACLE_HOME和LD前面的export去掉,

变成:

ORACLE_HOME=/oracle/product/12.1.0/client_1
LD_LIBRARY_PATH=/oracle/product/12.1.0/client_1/lib

重启apache,phpinfo的environment有了ORACLE_HOME和LD了:

Environment

VariableValue
PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
LANGC
NOTIFY_SOCKET@/org/freedesktop/systemd1/notify
ORACLE_HOME/oracle/product/12.1.0/client_1
LD_LIBRARY_PATH/oracle/product/12.1.0/client_1/lib
KRB5RCACHETYPEnone 

浏览器刷新test.php,数据库连接成功!

泪崩了。。。。。


参考:http://idefs.com/record-centos-configure-apache2php-7-oci8.html


顺便提一下,windows上连接到linux的图形界面,用VNC很方便。
现在linux上用root安装vnc-server,大概命令是yum install vnc-server
然后在linux开启vncserver,比如,root执行 vncserver :1, oracle执行 vncserver :2
第一次执行会要求设置一个密码
然后在windows下一个vnc viewer,很小,直接执行不需要安装
连接地址写: linuxIP地址:数字
这是数字就是linux上对应用户设置的数字
例如 IP地址:1 就会连接到root, IP地址:2 就会连接到oracle
连接时输对密码就可以连接到linux图形桌面了,很方便。
当然连接是明文,网上有教你映射到ssh端口的,不过这我就没去折腾了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值