在Nginx + php-fpm(fastcgi)环境下配置informix的连接

时间:2024-04-10 19:38:53
目的:PHP在php-5.2.0的版本以后就将informix的扩展从源代码里删除掉,而改用pdo_informix的方式连接。而使用PDO_INFORMIX连接存在这样或者那样的问题,同时若是以前使用php informix扩展连接方式的程序需要重写构造。本文介绍的是使用nginx + php-fpm结合php-5.2.0中的informix扩展重新实现php 直连informix。

环境:rhel5.5 64bit

相关软件包(置于nginx家目录的soft目录下): 
    nginx-0.8.54.tar.gz
    php-5.2.8.tar.gz
    php-5.2.8-fpm-0.5.10.diff.gz
    php-5.2.0.tar.gz (仅需要php-5.2.0/ext/informix目录。打包附上)
    pcre-devel-6.6-2.el5_1.7.rpm (安装nginx的依赖包)
    autoconf-2.13.tar.gz (autoconf 2.13,这个可能需要,重新生成configure)

本文使用用户nginx来安装软件(rpm的需要使用root用户rpm安装),用户informix用于安装informix csdk。

建立用户nginx,并设置密码
root# useradd -d /home/nginx -m -s /bin/bash nginx
root# groupadd informix
root# useradd -g informix -d /opt/informix -m -s /bin/bash informix


1.informix csdk的安装
  csdk安装于/opt/informix目录下(示例中使用此目录),安装过程略。

2.php-fpm的安装.
  在soft目录下
  nginx% tar -xzvf php-5.2.8.tar.gz                     (解压包php-5.2.8,将生成目录php-5.2.8)
  nginx% gunzip php-5.2.8-fpm-0.5.10.diff.gz     (解压包php-5.2.8-fpm-0.5.10.diff)
  
  在php-5.2.8/ext 目录下解开php_informix.zip 生成目录informix
  nginx% unzip php_informix.zip
  
  在soft目录下为php-5.2.8加上fpm
  nginx% patch -d php-5.2.8 -p1 < php-5.2.8-fpm-0.5.10.diff (给php-5.2.8的源码打上fpm补丁)

  在php-5.2.8目录下重建configure
  nginx% ./buildconf --force
  这里需要注意:可能出现类似以下
buildconf: checking installation... 
buildconf: autoconf version 2.59 (ok) 
buildconf: Your version of autoconf likely contains buggy cache code. 
Running cvsclean for you. 
To avoid this, install autoconf-2.13. 
rebuilding configure

  这时,需要编译autoconf-2.13来避免此问题,编译autoconf-2.13的方法如下:
  解压缩autoconf-2.13.tar.gz包,然后编译即可,而不需要覆盖现在的autoconf
  nginx% gunzip autoconf-2.13.tar.gz | tar xvf -
  在autoconf-2.13目录下
  nginx% ./configure --prefix=/home/nginx/autoconfig213
  完成后
  nginx% make && make install
  此时,autoconf编译完成,在环境变量中增加PHP_AUTOCONF和PHP_AUTOHEADER
  nginx% export PHP_AUTOCONF=/home/nginx/autoconf213/bin/autoconf
  nginx% export PHP_AUTOHEADER=/home/nginx/autoconf213/bin/autoheader
  
  再次在php-5.2.8下执行重建configure,确认configure文件重写生成。
  nginx% ./buildconf --force
  
  然后可以通过./configure --help 来检查应该含有--with-informix[=DIR] 这样的选项了。
  
  在编译php-fpm前,在环境中指定INFORMIXDIR(必须,若未配置必须要--with-informix中指定目录)和INFORMIXSERVER
  nginx% export INFORMIXDIR=/opt/informix
  nginx% export INFORMIXSERVER=ids_online_net
  
  注:以下编译选项还包含了mysql的连接,若不需要可以不选。
  nginx% ./configure \
    --prefix=/home/nginx/php \
    --enable-fastcgi \
    --enable-fpm \
    --with-mysql \
    --with-informix \
    --with-zlib \
    --with-curl \
    --with-freetype-dir \
    --enable-ftp \
    --enable-zip 
 
  nginx% make all                           (编译所有)
  nginx% make install                       (编译安装,完成安装)

检查安装
  nginx% cd /home/nginx/php/bin
  nginx% ./php -v                                (显示如下内容,表示安装正常)
    PHP 5.2.8 (cli) (built: Aug 11 2009 22:53:04) 
    Copyright (c) 1997-2008 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
 
  将php-5.2.8目录下的php.ini-dist 复制到/home/nginx/php/lib/php.ini
  
  修改配置文件/home/nginx/php/etc/php-fpm.conf,找到部分(该部分的内容是指定php的环境变量)
  增加以下两项。(示例中使用用户环境变量,即上面指定的两个环境变量)
    $INFORMIXDIR
    $INFORMIXSERVER
  修改PATH,使用$PATH替换掉默认变量
    $PATH
 
  完成以上后,启动php-fpm
  nginx% /home/nginx/php/sbin/php-fpm start


3.nginx的安装
  nginx% tar -xzvf nginx-0.8.54.tar.gz           (解压缩包nginx-0.8.54,生成目录nginx-0.8.54)
  nginx% cd nginx-0.8.54
  nginx% ./configure \
    --prefix=/home/nginx                        (指定--prefixm,配置前,应先安装好pcre-devel)
 
  nginx% make                                   (编译)
  nginx% make install                           (编译安装)
 
  配置nginx
  修改/home/nginx/conf/nginx.conf 配置文件,需做如下修改
  
      server {
        listen       8080;      (修改所使用的端口)
        server_name  localhost; (修改所使用的服务器名,可以使用IP地址) 
 
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
  取消FastCGI server部分location的注释,并要注意fastcgi_param行的参数,$fastcgi_script_name 应改为$document_root$fastcgi_script_name,或者使用绝对路径
 
  完成配置后启动
  nginx% /home/nginx/sbin/nginx
 
  编写个phpinfo.php文件保存在/home/nginx/html/目录下,文件内容如下:
  <?php phpinfo(); ?>
  
  然后在浏览器中打开,输出应当有informix的项目,并且需要注意php的变量中存在INFORMIXDIR和INFORMIXSERVER,如图所示:
在Nginx + php-fpm(fastcgi)环境下配置informix的连接  
  
  编写个连接至informix数据库的php文件testifx.php,ifx_connect的参数含义是([email protected], user, password)
  <?php
    $conn_id = ifx_connect ("[email protected]_online_net", "informix", "informix");
    if ($conn_id){
        echo "connect success!";
    } else {
        echo "connect failed!";
    }
  ?>
  
  若是指定的数据库正常运行的话,应该能得到输出 connect success! 


结束语:弄这个弄了好几天,到今天01:30(2011.02.02,春节咯!^_^)总算是搞定了,中间因为php的环境问题做了好几次(使用php -e testifx.php一直都正常,在浏览器中输出错误),偶然看到php-fpm的进程中含有配置文件名,这才找到关键所在,加上环境就一切都好了!
阅读(2301) | 评论(0) | 转发(0) |