- 论坛徽章:
- 0
|
前两天回答了网友两个问题:
1)如何在 PHP 中编译、添加拓展模块
2)如何在 PHP 脚本中使用 Lock tables 语句。
但是由于工作太忙以及个人懒惰等原因,都没有回答透彻,所以特地新开贴详细说明一下。
-----------------------------------------
问题1:如何在 PHP 中编译、添加拓展模块?
-----------------------------------------
我用的是最原始的方法:手工编译 .so 文件 ,然后在 php.ini 中添加近来,其实就是安装 PECL 的方法。RPM 包来安装拓展模块其实也就是完成了一个自动化的过程。
以添加 mysqli 拓展模块为例子,基本步骤是:
- #cd $PHP_HOME/ext/mysqli/
- #phpize
- #./configure
- #cp modules/mysqli.so php_extensions_dir/
复制代码
系统之间有细微差别,需要手工研磨的工序有:
1) 我所使用的 FreeBSD 系统非常纯洁,换句话说就是啥都没有,你需要下载 autoconf 和 automake 两个开发程序才能让 phpize 工作起来。
2) 有的人没有 phpize 程序。也没关系,您可以从别的机器上拷贝一个,稍微修改一下环境变量就行了。
3) ./configure 的时候提示 embeded mysql 错误,重新执行了一下
- # mysqld_safe `/usr/local/mysql/bin/mysql_config --embedded`
复制代码 错误依旧,在无数次瞎试中,下面的命令救了我:
- ./configure --with-mysqli=/usr/local/mysql/bin/mysql_config
复制代码
4) 修改 php.ini 文件,设置 extension_dir 为模块所在的目录,注意不要有空格。很多网友加载模块不成功往往就是没做这一步。
5)加载模块,在 php.ini 中加入 extension=mysqli.so 即可,建议重启一下 apache 1.3.x:。当然也可以在程序中用 dl() 函数来调用拓展模块,随您。
-------------------------------------
问题2:如何 Lock Tables ?
-----------------------------------
我当时说直接 query 就成了,可能不太具体,写了个粗糙的示范例子,没写怎么提取 error code 来判断表是否在锁定状态,当然肯定有更好的方法,大家就别较这个真了:
- <?PHP
- /*
- these codes used for test the SQL sentence : Lock Tables & Unlock Table in MySQL Server.
- require the PEAR::DB library.
- code by wsswan
- contact to me please send mail to domain 163 DOT com in account by wsswan :)
- ------------
- date: 2005 - 05 -15 1:29 AM
- OS : FreeBSD 5.3
- PHP : php-5.0.4
- edit: vim
- ------------
- copyright give everyone.
- */
- require_once 'DB.php';
- $dns = 'mysqli://root:@localhost/test';
- $DB = DB::connect($dns);
- if(DB::isError($DB)){
- echo "\nconnect have error:".$DB->;getMessage();
- exit(1);
- }
- $sql = 'insert dog(userid,action,script,date,ipaddress) Values(1,\'hehe\',\'haha\',\'22\',22)';
- $result = $DB->;query($sql);
- if(DB::isError($result)){
- echo "\nSQL query have error:".$DB->;getMessage();
- exit(1);
- }
- //==== [ test LOCK sentence paragraph ] ==============
- //initial variable
- $sql = null ;
- $sql = array('LOCK TABLES dog WRITE' ,
- 'insert dog(userid,action,script,date,ipaddress) values(1,\'hehe\',\'haha\',\'22\',22)',
- 'UNLOCK TABLES' ,
- 'insert dog(userid,action,script,date,ipaddress) values(1,\'hehe\',\'haha\',\'22\',i 22 )'
- );
- foreach($sql as $value){
- $result = $DB->;query($value);
- if(DB::isError($result)){
- echo "\n =>;".$value."<=\n excult error:";
- }
- }
- /*
- mysql>; LOCK TABLES real_table WRITE, insert_table WRITE;
- mysql>; insert into real_table select * from insert_table;
- mysql>; delete from insert_table;
- mysql>; UNLOCK TABLES;
- */
- //======= [ end test ] ===============================
- $DB->;disconnect();
- ?>;
复制代码 |
|