对于lamp的安装,我通常状况下都是选择,先安装php再安装mysql,php源码中自带了mysqlnd,使用起来很方便。php
可是其实并非说必定要使用mysqlndhtml
好比我安装php的时候没有开启MySQL的扩展,此时又当如何给php添加功能呢?mysql
咱们能够经过php扩展的广泛安装方法操做,也就是使用phpize生成configure文件,而后make && make install最后在php.ini中添加加载模块的指令linux
如下内容来自网络,请自行测试c++
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客户端才能完成链接数据库的操做。
1、为何书中通常是经常是这样的顺序安装:先安装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能够解决这个问题。
2、实践生成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已经安装了。编译生成一个其余数据库的扩展,思路也是同样的