专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » php5安装:基于 PHP5 面向对象特性的 PECL 扩展 Perl 和 PDO 编程 »正文

php5安装:基于 PHP5 面向对象特性的 PECL 扩展 Perl 和 PDO 编程

来源: 发布时间:星期一, 2009年1月26日 浏览:2次 评论:0
  介绍

  拥有更成熟面向对象语法 PHP 5 发布的后基于 PHP 面向对象新特征些 PECL 扩展也得到了极大发展本文主要目就是通过个简单应用展示两个基于 PHP5 面向对象特性 PECL 扩展安装部署及编程思路方法

  PECL

  PECL 全称是 The PHP Extension Community Library 个开放并通过 PEAR(PHP Extension and Application RepositoryPHP 扩展和应用仓库)打包格式来打包安装 PHP 扩展库仓库通过 PEAR Package Manager 安装管理方式可以对 PECL 模块进行下载和安装和以往多数 PEAR 包区别PECL 扩展包含是可以编译进 PHP Core C 语言代码因此可以将 PECL 扩展库编译成为可动态加载 .so 共享库或者采用静态编译方式和 PHP 源代码编译为思路方法进行扩展PECL 扩展库包含了对于 XML 解析数据库访问邮件解析嵌入式 Perl 以及 Pthyon 脚本解释器等诸多 PHP 扩展模块因此从某种意义上来说在运行效率上 PECL 要高于以往诸多 PEAR 扩展库

  在使用 PECL 对 PHP 进行扩展安装过程中需要用户熟悉 PEAR 包安装思路方法以及 pear 命令使用 PEAR Package Manager 可以直接下载编译并安装 PECL 扩展库至 PHP 扩展目录中用户需要自行将扩展库支持在 php.ini 文件中加以配置或直接使用 dl 在运行时进行动态加载以使用 PECL 扩展库功能

  有关 PEAR Package Manager 详细使用思路方法请参阅 http://pear.php.net 上相关文档本文也将在下面举例中给出使用 PEAR Package Manager 进行 PHP PECL 扩展库安装举例

  嵌入式 Perl 解释器扩展

  PHP Perl 扩展允许在 PHP 代码中直接使用 Perl 代码这实际是个内嵌 Perl 解释器能够在 PHP 和 Perl 的间进行数据交换目前该扩展仅支持从 PHP 到 Perl 单向接口在将来会实现双向接口目前 PHP Perl 扩展允许员使用 PHP 脚本做以下事情:

  加载并执行 Perl 文件

  执行 Perl 代码

  访问和修改 Perl 变量

   Perl

  化 Perl 对象

  访问 Perl 对象属性

   Perl 对象思路方法

  所有这些特征都是通过个简单 API 类—— Perl 实现PHP Perl 扩展安装部署思路方法将在后面介绍这里先来讨论该扩展使用思路方法从 PHP 中访问 Perl 解释器首先需要创建个 Perl 类例子

  清单 1. 化 Perl 对象

<?php
  $Perl = Perl;
?>


  上面代码创建了个 Perl 解释器例子该扩展允许在 PHP 代码环境中同时创建这个解释器多个例子但是他们在内部将使用同个解释器因此所有变量和代码都将通过例子共享对象 $perl 可以用来访问和修改 Perl 变量 Perl 执行 Perl 代码加载并执行外部 Perl 文件等其中外部文件可以通过 Perl:require 思路方法加载这个不返回任何值如果要加载 Perl 文件不存在或无效这将会导致抛出 PHP 异常

  清单 2. Perl 例子操作举例

  <?php

  $perl = Perl;

  $perl->require(test.pl); //load external file – test.pl

  var_dump($perl->x); // pr scalar Perl variable - $x

  var_dump($perl->.gif' />->x); // pr .gif' /> Perl variable - @x

  var_dump($perl->hash->x); // pr hash Perl variable - %x

  $perl->func; // call Perl function 'func' in void context

  $x = $perl->func; // call Perl function 'func' in scalar context

  $y = $perl->.gif' />->func; // call Perl function 'func' in .gif' /> context

  $y = $perl->hash->func; // call Perl function 'func' in hash context

  ?>

  执行 Perl 代码Perl 代码可以通过 eval 来执行当要执行 Perl 代码出现时抛出PHP异常

  清单 3. 执行 Perl 代码举例

<?php
  $perl = Perl;
  $perl->eval('use Digest::MD5');//load perl MD5
  echo $perl->{'Digest::MD5::md5_hex'}('perl2php');
  var_dump($perl->md5_hex(“Hello”));
  $perl->eval('require "TEST.pm";');//load a perl file
  echo $perl->eval($x.'+'.$y.';'); // caculate and pr the result of x+y
  $perl->eval('$z='.$x.'+'.$y.';');
  echo $z;
  $perl->eval(‘
        sub sum{
          my $x = sh(@_);
          foreach my $y (@_){
            $total + =$y;
          }
           $total
        }
        ’);
  echo $perl->eval(“sum(1,2,3,4)”).”.”;
?>


  默认情况下 Perl 代码在标量上下文中被执行但是也可以指定其在 .gif' /> 或者 hash 上下文中执行

  清单 4. 在 .gif' /> 和 hash 上下文执行 Perl 代码

<?php
  $perl = Perl;
  $perl->eval('("a","b","c")');         // eval in void context
  var_dump($perl->eval('("a","b","c")'));    // eval in scalar context
  var_dump($perl->.gif' />->eval('("a","b","c")')); // eval in .gif' /> context
  var_dump($perl->hash->eval('("a","b","c")')); // eval in hash context
?>


  除此的外也可以在 PHP 脚本中使用 Perl 对象Perl 本身是种面向对象语言但是对于类定义没有具体语法在 Perl 中类可以看做是个包思路方法可以简单认为是包中提供这些把该对象引用作为第个参数Perl 扩展允许开发人员在 PHP 脚本中化 Perl 对象并允许直接访问该对象属性和思路方法在PHP 中使用 Perl 对象同样需要使用 Perl 这个构造但和前面思路方法区别需要传递参数给该构造语法如下:

  清单 5. 嵌入式 Perl 解释器对象

Perl($perl__name[, $constructor = ""[perl_para,…]])

  其中第参数是 Perl 类(包)名第 2个参数是构造名字(可选)如果有其他参数这些参数将被传递给 Perl 构造器如果第 2个参数被省略默认构造 将被

  在 PHP 脚本中个 Perl 对象的后便可以跟使用 PHP 自身对象样进行使用区别点是思路方法上下文不在默认情况下思路方法是在标量 scalar 上下文中被要想在 .gif' /> 或者 hash 上下文中进行可以参照前面思路方法:不直接通过 Perl 对象该思路方法而应该通过个具体属性 .gif' /> 或者 hash 进行此外化 Perl 对象的后还可以在对象的间进行复制操作

  清单 6. 对象操作举例

<?php
   $x = Perl("Test");
   $y = Perl("Test","Test",$x);
   $z = clone $y;
   echo $z->property;
   echo $z->method(1,2,3); // call method "f" in void context
   var_dump($x->method(123));    // call method in scalar context
   var_dump($x->.gif' />->method(123)); // call method in .gif' /> context
   var_dump($x->hash->method(123)); // call method in hash context
?>


  在上面例子代码中 Test 是个 Perl 类在 PHP 代码环境中可以用 require 思路方法将其包文件从外部引入也可以在 PHP 脚本中利用 Perl 对象 eval 直接构造这样个 Perl 类例子行将 Test 类中 思路方法构造 Test 对象而第 2行将 Test 类中 Test 思路方法构造 Test 对象

  统数据访问接口PDO

  PDO(PHP Data Objects) 扩展为 PHP 访问数据库定义了个轻量级致性接口它提供了个数据访问抽象层这样无论使用什么数据库用户都可以通过统执行来查询和获取数据注意你并不能使用 PDO 扩展本身执行任何数据库操作必须使用个 database-specic PDO driver (针对特定数据库 PDO 驱动)访问数据库服务器

  目前 PDO 支持如表1中数据库操作接口:

  表 1. 支持 PDO 驱动及相应数据库列表

   驱动名 所支持数据库服务器
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird/Interbase 6
PDO_IBM IBM DB2
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.x/5.x
PDO_OCI Oracle Call Interface
PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 and SQLite 2



  PDO 并不提供数据库抽象它并不会重写 SQL 或提供数据库本身缺失功能如果用户需要这种功能就必须使用个更加成熟抽象层PDO 是随 PHP 5.1 发行在PHP 5.0 PECL 扩展中也可以使用PDO 需要 PHP 5 核心面向对象特性支持所以它无法运行于的前PHP 版本

  PDO 安装部署思路方法将会在后面章节介绍此处先介绍 PDO 使用

  连接和连接管理

  数据库连接建立可以通过创建个 PDO 基类实体实现开发人员不用关心需要使用是那个驱动在代码中只需要使用 PDO 类名构造接受个参数来表明数据源(也就是通常所知 DSN)另外还有 3个参数是可选如果数据库服务器连接需要提供用户名和密码则需要在构造中指定;在该构造同时还可以通过第 3个可选参数传递连接类型等信息

  清单 7. 建立 PDO 连接(以 DB2 Server为例)

<?php
  function Connect
  {
    try{
      $dbh = PDO(‘odbc:test’,‘user’,‘password’
        .gif' />(PDO_ATTR_PERSISTENT =) true));
    } catch(PDOException $e) {
      echo 'Connection failed: ' . $e->getMessage;
      die;
    }
     $dbh;
  }
?>


  odbc:test 告诉 PDO 它所应该使用 ODBC 驱动并且应该使用 "test" 数据库如果使用个驱动管理器那么可以用个 ODBC 级数据源名称替代 "test"在冒号的后可以指定任何有效 ODBC 数据源连接接下来分别是用来连接数据库用户名和密码通过设定 PDO_ATTR_PERSISTENT 值为 true 可以建立个到数据库持久连接默认情况下不指定此参数建立连接在脚本运行完毕或者所有对该 $dbh 应用都被是释放时候连接就会被断开在某些情况应用设计者只希望建立次连接以后对该数据库所有访问操作都通过该连接实现这时候就可以建立持久连接持久连接建立后会被缓存Cache并且在其他数据库操作脚本访问该数据源时候被重用

  断开连接

  默认情况下当建立连接是非持久连接时候当脚本结束时候连接将会断开也可以通过显性将 $dbh 变量设置为 null 来断开连接

  清单 8. 断开 PDO 连接

<?php
  function Disconnect($dbh)
  {
    $dbh = null;
  }
?>


  执行数据库操作

  建立了和数据库连接的后就可以对数据库进行 SQL 查询操作对于无返回结果集数据库操作(例如删除更新插入等) PDO 通过个统 exec 来实现这个返回值通常是数据库操作影响行数以删除为例返回结果是删除行数而对于需要返回数据结果集查询操作则通过 query 来实现它将返回个 PDOStatement 类型结果集合对于 PDOStatement 类型结果集可以用它各种操作思路方法(例如 fetch 等)来操作结果集里面数据

  清单 9. 执行数据库操作

<?php
//issues a SQL statement and s the number of affected rows.
function Execute($execStr)
{
  try{
    $dbh = Connect;//引用清单1中思路方法
    $result = $dbh->exec($execStr);
  } catch (Exception $e) {
   
  }
   $result;
}
//issues a SQL statement and s a result .
function Query($queryStr)
{
  try{
    $dbh = Connect;//引用清单1中思路方法
    $result = $dbh->query($queryStr);
  } catch (Exception $e) {
  }
   $result;
}
?>


  事务和自动提交

  PDO 事务操作以自动提交模式运行也就是说如果数据库支持事务那么所运行个查询都有它自己隐式事务如果数据库不支持事务每个查询就没有这样事务如果需要启动个事务操作必须使用 PDO::beginTransaction 思路方法来启动这里需要注意是:如果底层驱动不支持事务那么将抛出个 PDOException个事务中可以使用 PDO::commit 或 PDO::rollBack 来结束该事务这取决于事务中运行代码是否成功

  清单 10. 运用事务操作进行批处理

<?php
  //issues a of SQL statement during a transaction
  function Execute (.gif' /> $tranStr)
  {
    try{
      $dbh = Connect;//引用清单1中思路方法
      $dbh->beginTransaction;
      foreach($transStr as $stateStr)
      {
        $dbh->exec($stateStr);
      }
      $dbh->commit
    } catch (Exception $e) {
      $dbh->rollBack;
    }
     $result;
  }
?>


  在上面中所要执行系列 SQL 命令包括在 beginTransaction 和 commit 可以保证在更改完成的前其他人无法看到更改如果发生了catch 块可以回滚事务开始以后发生所有更改这样可以有效保证数据致性在需要同步进行操作数据更新中有重要应用当脚本结束或当个连接即将被关闭时如果有个未完成事务那么 PDO 将自动回滚该事务

  预处理语句

  首先需要解释下预处理语句通常将预处理语句看作要运行 SQL 种编译过模板它可以使用变量参数进行定制以运行个重复插入数据为例当往个表中反复插入区别数据时候使用预处理语句只需要编译每次插入时候只需要将变量用具体参数取代即可这可以在很大程度上提高数据库性能大部分成熟数据库都支持预处理语句即使驱动不支持预处理语句PDO 也将仿真预处理语句

  清单 11. 使用预处理语句

<?php
  $dbh = Connect;
  $prepareStatement = $dbh->prepare(“INSERT INTO STUDENT (id,name) VALUES (:id,:name)”);
  
  //bind the placeholder with a specy variable.
  $prepareStatemnet->bindParam(‘:id’, $id);
  $prepareStatement->bindParam(‘:name’, $name);
  
  //insert records.
  $id = ‘1’;
  $name = ‘user1;
  $prepareStatement->execute;
  $id = ‘2’;
  $name = ‘user2;
  $prepareStatement->execute;
?>


  举例:个简单网络连通性测试工具

  在这个简单举例使用 Perl 编写个检查指定服务器是否可以通过操作系统 ping 命令测试网络连通并通过 PHP 该思路方法获取测试结果同时将测试结果存入基于 DB2 数据库中在这个基于 WEB 举例对于测试服务器网络是否可连接 Perl 语言代码在附件例子代码中读者可以下载阅读本文将不对该部分代码做解释而将主要精力放在描述 PHP Perl 代码思路方法和 PDO 操作数据库思路方法上读者可以在本文代码下载中获取到完整源代码

  开发环境搭建

  本演举例程由数个样本组成并使用了下列组件及开发测试工具:

  操作系统:RedHat Enterprise Linux Server 5.0

  WEB 服务器:Apache 2.2.8

  数据库服务器:DB2 Server Enterprise Edition 9

  PHP:5.0.0/5.2.6

  Perl:5.8.0

  对于 PHP 和 Apache 安装部署在本文中不做重复介绍以下仅介绍 PDO 和 Perl 扩展安装和部署思路方法

  PHP Perl扩展安装和部署

  PHP Perl 扩展可以在 PECL 网站WebSitehttp://pecl.php.net/package/perl获得下载为了正确安装和使用该扩展操作系统软件Software环境必须满足以下需求:

  PHP 5.0.0 RC2 以上版本

  Perl 5.8.0 以上版本

  编译扩展文件PHP_PREFIX 和 PERL_PREFIX 必须指向 PHP 和 Perl 安装路径

#export PHP_PREFIX="/usr"
#export PERL_PREFIX="/usr"
#$PHP_PREFIX/bin/PHPize
#./configure --with-Perl=$PERL_PREFIX --with-PHP-config=$PHP_PREFIX/bin/PHP-config
#make


  安装(这步需要根用户特权)

#make

  在 php.ini 中添加 Perl 扩展 (这步需要根用户特权)

extension=Perl.so

  PDO 扩展安装部署

  PHP 5.1 发布时附带了 PDO但是也可以通过 PECL 这个 PHP 扩展库来结合使用 PDO 和 (1) PHP 5.0.3 及以上版本安装

  在举例应用开发中所使用个 DB2 数据库服务器需要注意点是在安装PDO 时需要 ODBC 驱动这就需要在本地安装有 DB2 管理客户机否则编译将失败

  在 PHP 5.0.3 及以上版本上通过 PECL 进行安装

  默认情况下PHP 将安装 "PEAR" 包管理系统为了成功地安装 PDO需要升级到 PEAR 1.3.5(需要跟用户特权);使用以下命令

#pear upgrade PEAR

  接下来就可以安装 PDO 了(同样需要根用户特权):

  #pear PDO

  安装完 PDO 核心后为了使的生效需要在 php.ini 文件中添加以下内容:

extension=pdo.so

  接下来需要安装用于 PDO ODBC 驱动

#pear PDO_ODBC

  按照提示输入 ODBC 驱动类型和驱动位置在举例中使用是 DB2 服务器如果采用 DB2 默认安装选项可以直接输入 ibm-db2如果选择了区别安装位置就要用实际位置替换 /home/db2inst1/sqllib由于 PEAR 不会为用户配置 PECL 扩展因此在安装完成后需要将驱动添加到 php.ini 文件中从而在PHP中正确加载驱动确保将下面内容添加在的前所添加 pdo.so 这行的后否则 PHP 将不能正确地

  extension=pdo_odbc.so

  (2) PHP 5.1及以上版本安装

  PHP 5.1 发布时附带了 PDO为获得 DB2 支持只需在编译 PHP 时将下面开关添加到配置行

#tar xzvf php-5.2.6.tar.gz
#cd php-5.2.6
#./configure –with-pdo-odbc=ibm-db2,/home/db2inst1/sqllib --with-apxs2=/usr/sbin/apxs
#make
#make


  安装完毕后应该完全重新启动 WEB 服务器以确保 PHP 装载新扩展这样就可以开始使用 PDO 了如果您使用是 UNIX 平台那么需要获得 DB2 客户机 DB2 例子环境以便正确地可以通过运行命令 source /home/db2inst1/sqllib/db2profile 来完成

  举例

  该举例流程和结构如下图所示下面将分别介绍各个部分功能及实现思路方法读者可以在本文附带举例代码中

  图 1. 举例总体结构

  

  结束语

  至此本文已经介绍了基于 PHP 5 面向对象特性两个 PECL 扩展安装部署及使用思路方法同时通过举例演示基本介绍了这两个 PECL 扩展具体应用思路方法基于 PHP 5 面向对象新特性诸多 PECL 扩展给 PHP 开发带来极大便捷也大大增强了 PHP 语言扩展功能如果您想在其他环境下部署您应用或者获得这两个基于 PECL 扩展更为详细信息可以通过访问 PHP 和 PECL 网站WebSite来获得这两个扩展详细手册和介绍说明



相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: