1. 正在先生首页
  2. 技术开发

最终,我还是在PHP7上加载了mysql.so

昨天从PHP5.3升级到了PHP7。就像一开始的预感一样,肯定不会那么顺利。问题一个接一个。现在遇到的问题,就是其中一个。

同事大半夜的告知,系统平台打不开了。本以为是个小事情,结果一整天就都耗在这个问题上了。
先看症状,打开服务器日志,提示

PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in /www/func.php:9\nStack trace:\n#0 /www/init.php(36): connect_db()\n#1 on line 9, referer:xxx

应该是数据库问题。经查证,原来从 5.5 开始,PHP 就放弃了 MySQL ,采用 MySQLi 和 PDO_MySQL 。也就是说,原先的代码中,但凡使用了 MySQL 的连接方式,最简单的升级方式,都得换成 MySQLi 。实际代码上,大概有这么个对应关系

mysql_connect() -> mysqli_connect()
mysql_select_db() -> mysqli_select_db()
mysql_query() -> mysqli_query()

别看在每个mysql后面只需要加一个i,实际操作中,还是有很多的问题。更何况代码已经很久没有动过了,不太敢随意动代码。所以就只有想办法把 mysql 连接方式重新带回系统中了。

我不太清楚直接找到低版本中的 mysql.so 文件复制到 PHP7 中是否管用,有这么做了的朋友分享一下经验。

我是从网上下载了以后在服务器上编译的

# 从GIT上把源码扒回来    
git clone https://github.com/php/pecl-database-mysql     mysql   --recursive  
# 进入该目录
cd mysql
# 开始编译,我的服务器上需要用管理员权限才可以进行编译,所以 sodu
sudo phpize
sudo ./configure
sudo make
sudo make install

这样就会生成一个 mysql.so 文件。根据服务器不同,所对应的目录不同。然后把下面这段加到 php.ini 中。

extension = mysql.so

重启服务器。 搞定收工。

可能遇到的问题。
1,服务器没有安装 phpize 。 phpize 是用来编译php模块的,需要下载并安装 PHP 开发工具

# 查一下对应自己版本的 php 开发工具
yum search php dev 
# 对应我的服务器是 PHP7.0的,所以
sudo yum install php70-devel

2,在 php.ini 中增加了 extension ,但是不生效。我遇到的这个问题是因为我的路径写错了。后来找到 php7.0 默认加载 mysqli 的文件。直接在它下面增加了 extension = mysql.so 这么一行。然后把 mysql.so 复制到 mysqli.so 相同的目录。问题解决。
3,其它办法和思路,可以参考这篇文章

原创文章,作者:Y.Y,如若转载,请注明出处:https://84361749.com/post/php7-mysql-so.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注