总结的方向:在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已经安装了。编译生成一个其他数据库的扩展,思路也是一样的

转载于:https://blog.51cto.com/xiaofengge315/1383592

在linux下php挂接mysql.so扩展的方法相关推荐

  1. linux php mysql.so_在linux下php挂接mysql.so扩展的方法

    总结的方向:在linux下php挂接mysql.so扩展的方法 问题背景:平常我们都是先安装mysql,然后才能去安装php.假如先安装php,后安装mysql,由于php需要连接mysql,因而在p ...

  2. linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题

    linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题 参考文章: (1)linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 M ...

  3. linux下导入、导出mysql数据库命令 下载文件到本地

    一.下载到本地 yum install lrzsz sz filename  下载 rz filename  上传 linux下导入.导出mysql数据库命令 一.导出数据库用mysqldump命令( ...

  4. MySQL——在Linux下安装和卸载MySQL

    MySQL--在Linux下安装和卸载MySQL 摘要:本文主要学习了如何在Linux系统中安装和卸载MySQL数据库. 查看有没有安装过MySQL 使用命令查看有没有安装过: 1 [root@loc ...

  5. linux下使用python操作mysql

    linux下使用python操作mysql 文章目录 linux下使用python操作mysql 一.Python 中MySQL的几个模块对象 1.模块 2.Connection 对象 3.Curso ...

  6. linux下使用C++操作mysql

    linux下使用C++操作mysql 文章目录 linux下使用C++操作mysql 一.常用类型介绍 1. MYSQL 2. MYSQL_ROW 3. MYSQL_FIELD 4. MYSQL_RE ...

  7. [mysql] linux下使用yum安装mysql

    From: http://www.2cto.com/database/201207/141878.html linux下使用yum安装mysql 1.安装 查看有没有安装过: yum list ins ...

  8. linux下rpm方式安装mysql(2012-5-12)

    由于感觉前几篇博客中关于linux下rpm方式安装mysql的方法问题太多,今天抽时间重新实践和整理了一下,现在拿出来和大家分享,希望对家有用. 系统环境: Rat had enterprise li ...

  9. linux mysql多实例启动_Mysql实例Linux下启动多个mysql服务器例子

    <Mysql实例Linux下启动多个mysql服务器例子>要点: 本文介绍了Mysql实例Linux下启动多个mysql服务器例子,希望对您有用.如果有疑问,可以联系我们. MYSQL教程 ...

最新文章

  1. Android服务之AIDL
  2. server.xml中也能获取Tomcat相对路径
  3. Lua_第17 章 数学库
  4. 多表关系介绍 mysql
  5. paip.系统无法在消息文件中为 Application 找到消息号为 0x2350 的消息文本。服务器存储空间不足,无法处理此命令
  6. php-fpm stop,php-fpm 启动,重启,终止操作
  7. 传感器技术(徐科军 第四版)第四章:光电式传感器
  8. 融合多源信息的知识表示学习方法
  9. 转载 DM9000的调试
  10. 天翼网关刷linux,天翼网关3.0-中兴F650光猫最新固件 开Telnet教程
  11. 异方差检验 python_stata教程03-异方差的检验和处理
  12. 业内人士解读:开发一个App到底要多少钱?
  13. nagios监控系统环境部署安装(LAMP环境)
  14. mysql opt frm_将.frm和.opt文件导入MySQL
  15. Linux(五)Linux远程连接管理工具xftp,xshell使用
  16. 一个简易的基于内容的新闻推荐系统
  17. matlab如何编写网页,[转载]如何使用matlab在网页中作图
  18. ubuntu编辑只读文件
  19. 【Oracle】学习笔记(五)高级查询
  20. SVN各种错误提示产生原因及处理方法大全

热门文章

  1. python第三方库Requests的基本使用
  2. Python基础-----条件语句与初识基本数据类型(一)
  3. 11.20 java 方法
  4. 章鱼哥出品—VB.NET DataGridView绑定数据源 quot;与货币管理器的位置关联的行不能设置为不可见quot; 问题的解决...
  5. UIAlertView' is deprecated: first deprecated in iOS 9.0 - UIAlertView is deprecated. Use UIAlert
  6. 关于STL 容器的嵌套使用, 小试牛刀
  7. Linux 系统时间和硬件时间
  8. Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类
  9. 《产品之光》作者Kevin:对于小程序我有话要说
  10. PMCAFF产品经理与融资7500万的故事