PHP解决版本不一致的问题

修改phpinfo()与php -v版本不一致的问题

php -v得到的版本是
PHP 7.2.34 (cli)

which php得到
/usr/bin/php

php-fpm -v得到的版本是
PHP 7.2.34 (fpm-fcgi)

which php-fpm得到
/usr/sbin/php-fpm

find / -name php.ini得到
/usr/local/php/etc/php.ini
/etc/php.ini

php -i | grep php.ini得到的php.ini位置是
Loaded Configuration File => /etc/php.ini

phpinfo()查到的php版本是
PHP 5.4.25

phpinfo()查到的php.ini位置是
Loaded Configuration File => /usr/local/php/etc/php.ini

ps -ef | grep php-fpm得到php-fpm加载的位置文件是
/usr/local/php/etc/php-fpm.conf

确认两种方式加载的php.ini不是同一个位置
修改让phpinfo()指向php -v一样的位置,通过~/memo/restart-lnmp.sh查到php-fpm服务的路径是
/etc/init.d/php-fpm

vim /etc/init.d/php-fpm看到
php_fpm_BIN指向/usr/local/php/sbin/php-fpm
php_fpm_CONF指向/usr/local/php/etc/php-fpm.conf
php_fpm_PID指向/usr/local/php/var/run/php-fpm.pid
把prefix=/usr/local/php改成prefix=
把exec_prefix=${prefix}改成exec_prefix=/user
意思是上面三个变量变成
php_fpm_BIN指向/usr/sbin/php-fpm
php_fpm_CONF指向/etc/php-fpm.conf
php_fpm_PID指向/var/run/php-fpm.pid

查到/etc/php-fpm.conf中pid指向/var/run/php-fpm/php-fpm.pid
因此修改上面php_fpm_PID指向/var/run/php-fpm/php-fpm.pid

使用~/memo/restart-lnmp.sh重启php-fpm报错,里面调用/etc/init.d/php-fpm stop
发现是php-fpm.pid路径不匹配引起的,使用ps -ef | grep php-fpm找到php-fpm进程,用kill xxx杀掉进程
然后再运行/etc/init.d/php-fpm start,正常,执行phpinfo()看到版本已经替换成7.2.34

升级php从5到7.2之后,mysql代码停止工作,需要把原mysql函数替换成mysqli,以下是示例代码:
// 连接数据库
$mysqli = new mysqli(‘localhost’, ‘username’, ‘password’, ‘database’);
$con = mysqli_connect(‘localhost’, ‘username’, ‘password’, ‘database’);

// 检查连接是否成功
if ($mysqli->connect_errno) {
echo “连接数据库失败: ” . $mysqli->connect_error;
exit();
}
if (mysqli_connect_errno()) {
echo “连接数据库失败: ” . mysqli_connect_error();
exit();
}

// 执行查询
$result = $mysqli->query(“SELECT * FROM table”);
$result = mysqli_query($con,”SELECT * FROM table”);

// 检查查询是否成功
if (!$result) {
echo “查询失败: ” . $mysqli->error;
exit();
}
if (!$result) {
echo “查询失败: ” . mysqli_error($con);
exit();
}

// 处理结果
while ($row = $result->fetch_assoc()) {
echo $row[‘column_name’] . “<br>”;
}
while ($row = mysqli_fetch_assoc($result)) {
echo $row[‘column_name’] . “<br>”;
}

// 关闭连接
$mysqli->close();
mysqli_close($con);

通过phpinfo()查到mysqli的MYSQLI_SOCKET是/var/lib/mysql/mysql.sock,而mysql的配置文件/etc/my.cnf中socket=/tmp/mysql.sock,与mysqli的MYSQLI_SOCKET不一致,因此修改my.cnf两处成:socket=/var/lib/mysql/mysql.sock

phpmyadmin直接从官网下载并部署即可,wordpress也直接从官网下载并部署,如果之前指定了default主题,可以直接把wp-content/themes/default拷到新版的themes目录并进入管理员后台启用即可:cp -r /home/www/wp.old/wp-content/themes/default /home/www/wp/wp-content/themes/default

Tags:

Leave a Reply