设为首页 收藏本站
查看: 942|回复: 0

[经验分享] 在linux下php挂接mysql.so扩展的方法

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-26 09:24:09 | 显示全部楼层 |阅读模式
总结的方向:在linux下php挂接mysql.so扩展的方法

问题背景:平常我们都是先安装mysql,然后才能去安装php。假如先安装php,后安装mysql,由于php需要连接mysql,因而在php引擎中需要配置使用mysql.so扩展。这时需要手动编译生成mysql.so扩展。

当前问题:在上面情况下,使用phpize能否实现挂接mysql.so扩展?

实践结论:使用phpize工具能够生成mysql.so,但是必须加上"--with-mysql=mysql客户端的路径"。也就是mysql.so模块必须用到mysql客户端才行。
可以这样理解,mysql.so内部会调用mysql客户端,以便实现连接mysql数据库服务器。
我们常常用到的mysql_connect()可能就是调用了mysql客户端才能完成连接数据库的操作。



一、为什么书中一般是常常是这样的顺序安装:先安装mysql,然后再安装php,很少看到先安装php,后安装mysql?

这样做。是基于下面原因:
安装好mysql后。mysql.so这个模块才能生成。记得一个细节:在安装php的时候,需要提供mysql的路径。由php帮助编译生成mysql.so模块。mysql.so这个模块是在安装好php的时候生成的。生成这个模块需要用到一个东西:

mysql客户端。如果先安装php,后安装mysql。那么无法按照原来的方式(由php帮助生成mysql.so模块)挂接mysql.so。通过实践,发现使用phpize工具生成mysql.so可以解决这个问题。





二、实践生成mysql.so的过程

大体思路:需要用到php的源码包才行。通过源码包中提供的phpize文件(一个专门挂接php扩展的工具)



2011.3.6测试成功
使用命令:  phpize --with-mysql=/usr/local/mysql/(mysql的安装路径)


第一步:进入php源码中的"ext/mysql"目录下
命令:cd

第二步:在当前目录下运行phpize

命令:/usr/local/php524/bin/phpize

phpize的规则:去哪个目录下运行phpize文件,那么就会在该目录下生成一个configure文件。

第三步:运行刚才生成的configure文件

命令: ./configure --with-php-config=/usr/local/php524/bin/php-config --with-mysql=/usr/local/mysql/
这里最关键的是通过--with-mysql参数告诉mysql客户端的位置。这样才能生成mysql.so。

实验的时候,没有加这个参数,结果错误:
./configure --with-php-config=/usr/local/php524/bin/php-config


第四步:编译生成.so文件。最终要的东西
make
make install

结束/////////////////////////////////////////////////////////


第五步:配置php引擎加载该扩展

省略

补充一下:就是去php.ini文件中修改一下配置,加载mysql.so这个扩展(这个扩展文件要放到php指定的扩展目录下面去)


第六步:测试php引擎是否成功加载该扩展

编写文件phpinfo.php,内容是:
<?php
ehco phpinfo();
?>

运行后,可以看到有如下信息显示:

mysql
MySQL Support    enabled
Active Persistent Links     0
Active Links     0
Client API version     5.1.55
MYSQL_MODULE_TYPE     no value
MYSQL_SOCKET     /tmp/mysql.sock
MYSQL_INCLUDE     no value
MYSQL_LIBS     no value

通过这样的方式可以确认,php引擎已经成功加载了mysql.so扩展。



第七步:已经生成的mysql.so。编写php代码测试是否能连接mysql

第六步成功后,已经知道php引擎已经成功加载了mysql.so扩展。还要确认生成的扩展是否能正常使用。为什么?因为编译失败还是成功都能生成.so的扩展。一般是这样的:.so扩展里面其实封装的就是一些函数,供我们调用

。假如有些函数没有生成,最后也会得到.so的扩展。也许它的.so模块内部是不完整的,都说不定。之前做一个支付接口的时候就是这样的问题。.so模块里面是用c++语言封装的函数。模块虽然已生成。但是并不能正常运行

。函数出现了异常,看不到任何错误。后来形成一个观念:不能以为,编译生成了.so文件,就认为是成功的

测试.so是否能用变得非常必要。现在测试一下生成的mysql.so是否能用。


编写如下php代码:

<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("mysql",$conn);
$results = mysql_query("select * from user");
$row = mysql_fetch_array($results);
var_dump($row);

?>

得到结果(部分):

array
  0 => string 'localhost' (length=9)
  'Host' => string 'localhost' (length=9)
  1 => string 'root' (length=4)
  'User' => string 'root' (length=4)
  2 => string '' (length=0)
  'Password' => string '' (length=0)
  3 => string 'Y' (length=1)
  'Select_priv' => string 'Y' (length=1)
  4 => string 'Y' (length=1)
  'Insert_priv' => string 'Y' (length=1)
  5 => string 'Y' (length=1)
  'Update_priv' => string 'Y' (length=1)

说明,编译生成后的mysql.so扩展能够正常使用了。


启发:如果开始安装mysql和php的顺序不对,后面就会增加了很多麻烦。所以,在实际情况中,有点经验的都会"会先安装php,再安装mysql",这样避免了挂接的问题。所以,实际中需要这样做很少。
假如这样一种情况就有用了:php与mysql都已经安装了。后面根据需要,想安装oracle等其他数据库,php已经安装了。编译生成一个其他数据库的扩展,思路也是一样的



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-16171-1-1.html 上篇帖子: 关于PHP中解析域名不成功的问题 下篇帖子: php把时间计算成几分钟前,几小时前,几天前的函数 linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表