centos6下PHP+oracle环境部署

公司PHP测试服务器出现宕机,运维同事早先没有做镜像备份,硬盘也没法回复,只能重新搭建新的测试环境。作为一个PHP门外汉,开始了PHP环境搭建之旅。

Paste_Image.png

PHP应用服务器部署(源码安装)

使用yum安装虽然方便,但这取决于源的版本,有些源若版本较低会出现PHP在支持数据库驱动方面支持不足,特此选择用源码安装。

  1. 下载PHP源码

2.编译和安装PHP源码
tar -zxvf php-5.5.38.tar.gz
cd php-src-php-5.5.38
./buildconf --force
配置相关参数
/configure --enable-fpm --enable-mbstring --with-mysql --with-mcrypt --enable-inline-optimization —disable-debug
./configure --enable-fpm --enable-mbstring --with-mysql --with-mcrypt --enable-inline-optimization --disable-debug
make
make install
cp ~/php-src-php-5.5.32/php.ini-production /usr/local/lib/php.ini

编译过程要求依赖相关包,比如gcc,autoconf等,根据提示使用 yum安装对应依赖包

3.配置PHP-FPM服务

  • PHP-FPM启动文件
    cp ~/php-src-php-5.5.32/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
  • 授权
    chmod 775 /etc/init.d/php-fpm
  • PHP-FPM配置文件
    cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf

oracle客户端安装

  1. 下载
  1. 安装
    rpm –ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
    rpm –ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
    rpm –ivh oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

第一个 RPM 将 Oracle 库放在 /usr/lib/oracle/11.2/client64/lib
中,第二个 RPM 在/usr/include/oracle/11.2/client64
中创建头

oracle驱动oci8安装

oci8为PHP连接oracle的驱动,必不可少。

  1. 下载
  1. 安装
    tar -xzf oci8-1.4.7.tgz
    cd oci8-1.4.7
    phpize
    ./configure --with-oci8=instantclient,/usr/lib/oracle/11.2/client64/lib
    make install
  2. 启用 OCI8 扩展
    编辑 php.ini并使用以下语句
    extension=oci8.so

如果指定extension_dir路径指向 oci8.so文件的安装目录,则可直接如上配置,否则指定决定路径

  1. LD_LIBRARY_PATH设置
    设置环境变量,在配置文件/etc/profile或~/base_profile添加
    /usr/lib/oracle/11.2/client64/lib

启动PHP

service php-fpm start

验证已安装 PHP OCI8 扩展

检查 OCI8 配置,创建一个简单的 PHP 脚本 phpinfo.php

<?php
  phpinfo();
?>

使用相应的 URL(例如 http://localhost/phpinfo.php
)将此脚本加载到浏览器中。浏览器页面将包含“oci8”部分,其中显示“OCI8 Support enabled”并列出可以配置的 OCI8 选项.

连接到 Oracle 数据库

要创建连接,传递 Oracle 用户名和口令凭证作为 oci_connect()
的两个参数。Oracle 数据库名称连接标识符必须用于第三个参数,因为与 Instant Client 链接的程序始终被视为“远离”任何数据库服务器,并需要向这些程序告知要连接到的数据库实例。对于已建立的 Oracle 数据库,连接字符串可能是众所周知的。对于新系统,此信息由 Oracle 安装程序在安装数据库时提供。安装程序应该已经为您配置 Oracle 网络并创建服务名称,如 orcl。

将连接信息传递给 PHP 有多种方法。此示例使用 Oracle 的简单连接语法连接到在 mymachine 上运行的 orcl 数据库服务中的 HR 模式。不需要 tnsnames.ora
或其他 Oracle 网络文件:
$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');

有关简单连接语法,请参见 Oracle 的使用简单连接命名方法文档。
在新数据库中,需要解除对 HR 用户等演示模式的锁定并为其提供口令。也可通过在 SQL*Plus 中以 SYSTEM 用户身份连接并执行以下语句来完成此操作:ALTER USER username IDENTIFIED BY new_password ACCOUNT UNLOCK;

使用 PHP OCI8 和 Oracle

试用简单的脚本 testoci.php
修改连接凭证以满足您的数据库要求,并将其加载到浏览器中。此示例列出了用户 HR 拥有的所有表:

<?php
  $conn = oci_connect('hr', 'hr_password',  'mymachine.mydomain/orcl');
  $stid = oci_parse($conn, 'select table_name from user_tables');
   oci_execute($stid);
    echo "<table>\n";
    while (($row = oci_fetch_array($stid,OCI_ASSOC+OCI_RETURN_NULLS)) != false) { 
    echo "<tr>\n"; 
    foreach ($row as $item) { 
      echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : " ")."</td>\n"; 
    } 
    echo "</tr>\n";
  }
  echo "</table>\n";
?>```
>注意:需要在/etc/hosts中添加`127.0.0.1 主机名`,在PHP连接oracle中默认会根据主机名去访问,否则会遇到“ORA-24408: could not generate unique server group name
”错误。[stackoverflow传送门](http://stackoverflow.com/questions/10484231/ora-24408-could-not-generate-unique-server-group-name)

本以为是否配置host不会影响PHP连接oracle,结果转了一圈花了几个小时时间发现只要配置host就解决问题,害的两次重新安装PHP,浪费大量时间,以此纪念。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容