清风如月

洗衣做饭,样样会干。上得厅堂,下得卧房,通得了厕所,打得死蟑螂,写得了代码,补得了裤衩~~~

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

对于lamp的安装,我一般情况下都是选择,先安装php再安装mysql,php源码中自带了mysqlnd,使用起来很方便。

但是其实并不是说一定要使用mysqlnd

 

比如我安装php的时候没有开启MySQL的扩展,此时又当如何给php添加功能呢?

我们可以通过php扩展的普遍安装方法操作,也就是使用phpize生成configure文件,然后make && make install最后在php.ini中添加加载模块的指令

 

 

以下内容来自网络,请自行测试

http://www.cnblogs.com/wangtao_20/archive/2011/03/07/1973621.html
总结的方向:在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已经安装了。编译生成一个其他数据库的扩展,思路也是一样的

 

posted on 2015-12-23 18:45  清风如月  阅读(25910)  评论(1编辑  收藏  举报