环境
centos6.4 php7 mysql5.1.3
注:Php7已经抛弃mysql函数,所以对应的扩展mysql也不用安装了。
由于之前使用了yum install方式安装的mysql数据库,所以导致安装目录是默认的
用指令可以 ps -ef | grep mysql可以查看到mysql相关配置
[root@cqs php]# ps -ef | grep mysql
由上面指令我们知道mysql对应的安装目录就是 --basedir=/usr
所以接下来先安装pdo_mysql这个扩展,由于之前装mysqli一直失败,原因也不知道,在make那一步就一直报错,所以就先安装pdo_mysql.
步骤:
先进入到Php的扩展安装目录
[root@cqs pdo_mysql]# cd /home/cqs/source/php-7.0.1/ext/
[root@cqs ext]# ls
看到了我们需要的两个扩展。
现在进入到pdo_mysql目录,
[root@cqs ext]# cd pdo_mysql/
先执行指令phpize
[root@cqs pdo_mysql]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20151012
Zend Module Api No: 20151012
Zend Extension Api No: 320151012
接下来,就可以进行配置了,这一步要”-with-pdo-mysql=mysql安装目录”,这个参数一定要写正确路径,以防下面报错。
[root@cqs pdo_mysql# ./configure --with-php-config=/usr/local/php/bin/php-config -with-pdo-mysql=/usr/
[root@cqs pdo_mysql#make
[root@cqs pdo_mysql#make test(这一步有可能提示警告,直接忽略)
[root@cqs pdo_mysql#make install
成功后会在/usr/local/php/lib/php/extensions/no-debug-zts-2015101目录下生成pdo_mysql.so文件
[root@cqs bin]# cd /usr/local/php/lib/php/extensions/no-debug-zts-2015101
[root@cqs no-debug-zts-20151012]# ls
curl.so my_module.so opcache.so pdo_mysql.so zip.so
说明已经成功安装pdo_mysql.so扩展了,接下来要配置php.ini文件
[root@cqs pdo_mysql]# cd /usr/local/php/lib/
[root@cqs lib]# ls
php php.ini
建议直接把php.ini文件拉到编辑器编辑后再保存到服务器端
新增
extension= /usr/local/php/lib/php/extensions/no-debug-zts-20151012/pdo_mysql.so
保存,重启服务器
[root@cqs lib]# /usr/local/httpd-2.4.18/bin/apachectl restart
浏览器运行phpinfo文件,查看到该模块已经加载
接下来就是安装mysqli扩展了
同理,进入
[root@cqs pdo_mysql]# cd ..
[root@cqs ext]# cd mysqli/
[root@cqs mysqli]# pwd
/home/cqs/source/php-7.0.1/ext/mysqli
由于之前一直尝试不成功,所以先进行make clean
[root@cqs mysqli]#make clean
运行phpize指令
[root@cqs mysqli]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20151012
Zend Module Api No: 20151012
Zend Extension Api No: 320151012
顺利完成。
运行./configure
[root@cqs mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config -with-mysqli=/usr
提示报错信息:
mysql_config not found
configure: error: Please reinstall the mysql distribution
查看帮助信息:
[root@cqs mysqli]# ./configure --help | grep mysqli
--with-mysqli=FILE Include MySQLi support. FILE is the path
--enable-embedded-mysqli
把后面的配置” --with-mysqli=/usr/”去掉,由于这里的FILE是指mysql-config对应的安装目录,所以直接去掉此参数,让系统默认
[root@cqs mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
真的没问题了,接下来运行make指令
[root@cqs mysqli]# make
报错了
/home/cqs/source/php-7.0.1/ext/mysqli/mysqli.c:1275: 错误:提供给函数‘php_mysqli_fetch_into_hash_aux’的实参太多
make: *** [mysqli.lo] 错误 1
又是这一步报错,本想放弃的,后面重新搞了一下
[root@cqs mysqli]#make clean
[root@cqs mysqli]#/usr/local/php/bin/phpize
[root@cqs mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/bin/
又报错
mysql_config not found
configure: error: Please reinstall the mysql distribution
查找mysql_config命令
[root@cqs mysqli]# whereis mysql_config
mysql_config: /usr/bin/mysql_config /usr/share/man/man1/mysql_config.1.gz
再次执行configure,
[root@cqs mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/bin/mysql_config
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
[root@cqs mysqli]#
没报错了,接下来执行make
/home/cqs/source/php-7.0.1/ext/mysqli/mysqli_api.c:36:47: 错误:ext/mysqlnd/mysql_float_to_double.h:没有那个文件或目录
make: *** [mysqli_api.lo] 错误 1
[root@cqs mysqli]#
通过查找资料知道,mysql_float_to_double.h这个文件不存在于mysqli目录下,所以接下来就是要把同级目录的mysqlnd下的mysql_float_to_double.h复制过来,
[root@cqs mysqli]# cd /home/cqs/source/php-7.0.1/ext/mysqli/
[root@cqs mysqli]# mkdir ext
[root@cqs mysqli]# cd ext/
[root@cqs ext]# mkdir mysqlnd
[root@cqs ext]# cd mysqlnd/
[root@cqs mysqlnd]# cp /home/cqs/source/php-7.0.1/ext/mysqlnd/mysql_float_to_double.h mysql_float_to_double.h
[root@cqs mysqlnd]# ls
mysql_float_to_double.h
以上指令目的是复制/home/cqs/source/php-7.0.1/ext/mysqlnd/mysql_float_to_double.h到
/home/cqs/source/php-7.0.1/ext/mysqli/ext/mysqlnd/mysql_float_to_double.h
成功复制文件后再次回到mysqli目录下,
[root@cqs mysqlnd]# cd /home/cqs/source/php-7.0.1/ext/mysqli/
[root@cqs mysqli]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20151012
Zend Module Api No: 20151012
Zend Extension Api No: 320151012
[root@cqs mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/bin/mysql_config
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
config.status: config.h is unchanged
[root@cqs mysqli]# make
Build complete.
Don't forget to run 'make test'.
[root@cqs mysqli]# make test
Build complete.
[root@cqs mysqli]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
Installing header files: /usr/local/php/include/php/
成功安装了,进入到对应目录查看:
[root@cqs bin]# cd /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
[root@cqs no-debug-zts-20151012]# ls
curl.so my_module.so mysqli.so opcache.so pdo_mysql.so zip.so
mysqli.so就是对应的扩展,再把它添加到对应的php.ini文件
extension= /usr/local/php/lib/php/extensions/no-debug-zts-20151012/mysqli.so
保存,重启服务器
[root@cqs lib]# /usr/local/httpd-2.4.18/bin/apachectl restart
浏览器运行phpinfo文件,查看到该模块mysqli已经加载
总结,之所以mysqli刚开始一直会失败,主要是mysqli目录下没有那个mysql_float_to_double.h文件导致的,所以那一步复制
/home/cqs/source/php-7.0.1/ext/mysqlnd/mysql_float_to_double.h到
/home/cqs/source/php-7.0.1/ext/mysqli/ext/mysqlnd/mysql_float_to_double.h
很重要,其他也没啥了,就是基本的逻辑,php在已安装的情况增加扩展步骤,
进入对安装扩展的目录,
[root@cqs lib]# cd /home/cqs/source/php-7.0.1/ext/
再进入对应的扩展目录xx
[root@cqs lib]# cd xx
[root@cqs xx]# /usr/local/php/bin/phpize
加载php已有的配置目录,再加上要安装的扩展,--with-xx=xx.path
[root@cqs xx]#./configure --with-php-config=/usr/local/php/bin/php-config --with-xx=xx.path
[root@cqs xx]#make
[root@cqs xx]#make install
完成后进入到对应目录,查看产生的xx.so
[root@cqs xx]# cd /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
xx.so
最后一步把这个xx.so添加到php.ini文件,重启服务器即可生效。