http 500

年前做了一个项目,但是中间公司做了一次数据迁移,然后就http500了,搜寻nginx 错误日志 没有报错,我去,这怎么搞?

打开access.log  发现只有一个 500  的错误码,很蛋疼了。

首先排查nginx的配置,一行一行的瞅,也没有发现哪里有错,接下来,难道是代码的问题?把代码从线上拉下来,运行,没问题,一切都很顺畅。这是什么鬼?实在摸不着头脑,喝口水,压压惊,从头开始捋。

1.项目是迁移服务器之后才出现的500,那证明项目本身没有问题

2。服务器上其他项目都是没问题的  只有这个不行,说明,这个项目的一些程序需要服务器的某些支持,有可能服务器的配置少了一些什么

既然有了思路,就开始整

一步一步调试代码,发现在初始化数据库程序的时候,连接不上数据库,

喏,就是这个  connect();

一万只草泥马在奔腾,数据库怎么会连接不上?

把线下的代码改成线上的数据库配置,能连接上,大概明白了。

于是,写了一个phpinfo  查看线上的php 我去, 只有pdo_mysql  没装mysql模块,

大爷的!!!!

由于我用的是php7  所以需要用mysqli,

好了,闲话不说,

上操作

用指令可以 ps -ef | grep mysql可以查看到mysql相关配置

[root@localhost /]# ps -ef | grep mysql

由上面指令我们知道mysql对应的安装目录就是 --basedir=/usr

[root@localhost /]# cd /home/php-7.0.33/mysqli/

/home/php-7.0.33/ext/mysqli

由于之前一直尝试不成功,所以先进行make clean

[root@localhost mysqli]#make clean

运行phpize指令

[root@localhost 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/bin/mysql_config

提示报错信息:

mysql_config not found

configure: error: Please reinstall the mysql distribution

我去,没有这个目录?

[root@localhost mysqli]# whereis mysql_config

mysql_config:

空的?????

好吧,无语了。

[root@localhost mysqli]# yum install mysql-devel

......此处省略安装信息

 使用 rpm -qa|grep mysql查看mysql的安装情况

[root@localhost mysqli]# rpm -qa|grep mysql

。。。。。。这里也省略

安装成功后,

[root@localhost mysqli]# whereis mysql_config

mysql_config: /usr/bin/mysql_config /usr/share/man/man1/mysql_config.1.gz

查看mysql_float_to_double.h这个文件并不存在于mysqli目录下,所以接下来就是要把同级目录的mysqlnd下的mysql_float_to_double.h复制过来,

[root@localhost mysqli]# cd /home/cqs/source/php-7.0.1/ext/mysqli/

[root@localhost mysqli]# mkdir ext

[root@localhost mysqli]# cd ext/

[root@localhost ext]# mkdir mysqlnd

[root@localhost ext]# cd mysqlnd/

[root@localhost mysqlnd]# cp /home/cqs/source/php-7.0.1/ext/mysqlnd/mysql_float_to_double.h mysql_float_to_double.h

[root@localhost mysqlnd]# ls

mysql_float_to_double.h

成功复制文件后再次回到mysqli目录下,

执行configure

[root@localhost 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

真的没问题了,接下来运行make指令

[root@localhost mysqli]# make

Build complete.

Don't forget to run 'make test'.

[root@localhost mysqli]# make test

Build complete.

[root@localhost 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@localhost bin]# cd  /usr/local/php/lib/php/extensions/no-debug-zts-20151012/

[root@localhost 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

保存,重启fpm

[root@localhost lib]# ps aux | grep php-fpm

[root@localhost lib]# kill -USR2  主进程号

浏览器运行phpinfo文件,查看到该模块mysqli已经加载

总结,mysqli目录下没有那个mysql_float_to_double.h文件   一定要复制

/home/php-7.0.33/ext/mysqlnd/mysql_float_to_double.h

/home/php-7.0.33/ext/mysqli/ext/mysqlnd/mysql_float_to_double.h

php在已安装的情况增加扩展步骤:如下

进入对安装扩展的目录,

[root@localhost lib]# cd /home/php-7.0.33/ext/

再进入对应的扩展目录

[root@localhost lib]# cd xx

[root@localhost xx]# /usr/local/php/bin/phpize

加载php已有的配置目录,再加上要安装的扩展,--with-xx=xx.path

[root@localhost xx]#./configure --with-php-config=/usr/local/php/bin/php-config   --with-xx=xx.path(如--with-mysqli=/usr/bin/mysql_config)

[root@localhost xx]#make

[root@localhost 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文件,重启服务器即可生效。

extension=xx.so

参考:https://blog.csdn.net/qiufengwuqing123/article/details/53707008 

上云就上阿里云,服务器低至89元/年

 

你可能感兴趣的:(http 500)