免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1493 | 回复: 0
打印 上一主题 下一主题

在 PHP 中添加模块的方法和在 PHP 中使用 Lock tables 的方法。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-15 02:09 |只看该作者 |倒序浏览
前两天回答了网友两个问题:
1)如何在 PHP 中编译、添加拓展模块
2)如何在 PHP 脚本中使用 Lock tables 语句。

但是由于工作太忙以及个人懒惰等原因,都没有回答透彻,所以特地新开贴详细说明一下。

-----------------------------------------
问题1:如何在 PHP 中编译、添加拓展模块?
-----------------------------------------
我用的是最原始的方法:手工编译 .so 文件 ,然后在 php.ini 中添加近来,其实就是安装 PECL 的方法。RPM 包来安装拓展模块其实也就是完成了一个自动化的过程。

以添加 mysqli 拓展模块为例子,基本步骤是:

  1. #cd $PHP_HOME/ext/mysqli/
  2. #phpize
  3. #./configure
  4. #cp modules/mysqli.so php_extensions_dir/
复制代码


系统之间有细微差别,需要手工研磨的工序有:

1) 我所使用的 FreeBSD 系统非常纯洁,换句话说就是啥都没有,你需要下载 autoconf 和 automake 两个开发程序才能让 phpize 工作起来。

2) 有的人没有 phpize 程序。也没关系,您可以从别的机器上拷贝一个,稍微修改一下环境变量就行了。

3) ./configure 的时候提示 embeded mysql 错误,重新执行了一下
  1. # mysqld_safe `/usr/local/mysql/bin/mysql_config --embedded`
复制代码
错误依旧,在无数次瞎试中,下面的命令救了我:
  1. ./configure --with-mysqli=/usr/local/mysql/bin/mysql_config
复制代码


4) 修改 php.ini 文件,设置 extension_dir 为模块所在的目录,注意不要有空格。很多网友加载模块不成功往往就是没做这一步。

5)加载模块,在 php.ini 中加入 extension=mysqli.so 即可,建议重启一下 apache 1.3.x:
  1. apachectl restart
复制代码
。当然也可以在程序中用 dl() 函数来调用拓展模块,随您。



-------------------------------------
问题2:如何 Lock Tables ?
-----------------------------------
我当时说直接 query 就成了,可能不太具体,写了个粗糙的示范例子,没写怎么提取 error code 来判断表是否在锁定状态,当然肯定有更好的方法,大家就别较这个真了:


  1. <?PHP
  2. /*
  3.     these codes used for test the SQL sentence : Lock Tables & Unlock Table in MySQL Server.

  4.     require the PEAR::DB library.

  5.     code by wsswan
  6.     contact to me please send mail to domain 163 DOT com in account by wsswan :)

  7.     ------------
  8.     date: 2005 - 05 -15  1:29 AM
  9.     OS  : FreeBSD 5.3
  10.     PHP : php-5.0.4
  11.     edit: vim
  12.     ------------

  13.     copyright give everyone.
  14. */

  15. require_once 'DB.php';

  16. $dns = 'mysqli://root:@localhost/test';

  17. $DB = DB::connect($dns);
  18. if(DB::isError($DB)){
  19.     echo "\nconnect have error:".$DB->;getMessage();
  20.     exit(1);
  21. }

  22. $sql = 'insert dog(userid,action,script,date,ipaddress) Values(1,\'hehe\',\'haha\',\'22\',22)';

  23. $result = $DB->;query($sql);
  24. if(DB::isError($result)){
  25.     echo "\nSQL query have error:".$DB->;getMessage();
  26.     exit(1);
  27. }
  28. //==== [ test LOCK sentence paragraph ] ==============
  29. //initial variable
  30. $sql = null ;

  31. $sql = array('LOCK TABLES dog WRITE' ,
  32.              'insert dog(userid,action,script,date,ipaddress) values(1,\'hehe\',\'haha\',\'22\',22)',
  33.              'UNLOCK TABLES' ,
  34.              'insert dog(userid,action,script,date,ipaddress) values(1,\'hehe\',\'haha\',\'22\',i 22 )'
  35.              );

  36. foreach($sql as $value){
  37.     $result = $DB->;query($value);
  38.     if(DB::isError($result)){
  39.         echo "\n =>;".$value."<=\n excult error:";
  40.     }
  41. }

  42. /*
  43. mysql>; LOCK TABLES real_table WRITE, insert_table WRITE;
  44. mysql>; insert into real_table select * from insert_table;
  45. mysql>; delete from insert_table;
  46. mysql>; UNLOCK TABLES;
  47. */
  48. //======= [ end test ] ===============================

  49. $DB->;disconnect();
  50. ?>;

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP