我非常需要帮助,我只想首先说我是 Web 服务器的新手。我的老板要求我将我们的 Web 服务器升级到最新版本的 Ubuntu 20.04 LTS,因为旧版本运行的是 14.04。我已经在桌面上安装了发行版和 LAMP Stack,因为我想在接触服务器之前先在自己的电脑上试用一下。我已经安装了 Apache2、PHP 7.4.3 和 mySQL 8.0,但旧服务器上运行的版本是 PHP 5.x 和 MySQL 5.x。我从中复制了所有文件/var/www/
和 Apache 配置文件,然后/etc/apache2
创建了一个 SQL 转储并迁移到新的 mysql 数据库(我确保权限与旧服务器相同)。但是,每次我localhost
在浏览器中打开时,都会看到此错误消息:
Database Error: Unable to load Database Driver: mysqli
更新:数据库错误已通过以下 Matigo 提供的步骤解决。
这是我的新情况,我仍然无法以本地主机身份访问我的网站,因为它只显示“错误”字样
错误日志显示:
无法读取会话数据:用户(路径:/var/lib/php/sessions)在 /var/www/kssp/libraries/joomla/session/handler/native.php 第 194 行
我非常感谢大家的帮助!
顺便说一下,会话目录如下所示:不确定是否需要为此执行 chmod。
drwxr-xr-x 3 root root 4096 2 月 8 日 22:55 模块 drwx-wx-wt 2 root root 4096 2020 年 3 月 27 日 会话
问题解决了:
采取的步骤:
- 卸载 - 重新安装 LAMP 服务器
- 验证所有 php 模块是否已启用
- 从旧服务器创建 mysql 数据库备份
- 在新服务器中重新创建 mysql 数据库
- 重新创建数据库用户并传递给新服务器,并确保其匹配 - 允许覆盖 Apache2.conf 上的所有内容
- 启用重写模块
现在,网站上的所有内容看起来与我的本地主机/服务器完全相同。
接下来就是映射ip地址,并指向A记录。
我很高兴这个问题已经解决了,感谢 Matigo 向我介绍了具体步骤。
答案1
根据持续存在的错误,该问题(在我看来)可以归结为以下几种情况之一:
php-mysql
未安装,或者不是 PHP 7.4 的正确版本- 未安装辅助
php-mysqlnd
包(这通常随附php-mysql
,因此不需要注意) - 自更新 PHP 以来,Apache 尚未重新启动
- 该扩展在其文件
mysqli
中被注释掉ini
因此,让我们通过在您的 Web 根目录中创建一个调用该phpinfo()
函数的虚拟 PHP 文件来进行一些测试:
- 打开终端(如果尚未打开)
- 在 Web 根目录中创建一个虚拟 PHP 文件:
笔记:sudo vi /var/www/testing.php
•您可以使用您喜欢的任何其他编辑器。vi
更多的是关于肌肉记忆,而不是对编辑的默认认可。
•一定要改变/var/www
到实际的文档根目录http://localhost
- 将其粘贴到新文件中:
<?php phpinfo(); ?>
- 保存文件
- 打开浏览器并访问
http://localhost/testing.php
。这将为您提供一个如下所示的 PHP 信息页面: - 向下滚动(或使用“查找”功能)找到标题为 的部分
mysqli
。它看起来应该像这样:
有趣的来了。
如果您访问时看到空白页testing.php
...
⇢ PHP 配置不正确。为简单起见,请删除并重新安装:
sudo apt install --reinstall php libapache2-mod-php php-mysql
然后重新启动Apache:
sudo service apache2 restart
如果您看到 PHP 信息页面,但没有看到 mysqli 的信息...
⇢mysqli
未安装或配置不正确。
mysqli
打开终端(或使用当前终端)并输入以下内容,确认已安装 PHP 7.4sudo apt install php7.4-mysql
(请注意,我们在这里专门调用 7.4 的包。这不是必需的,但我们希望 100% 确定它是适合您的 PHP 安装的正确版本)如果一切安装正确,您将看到如下消息:
Reading package lists... Done Building dependency tree Reading state information... Done php7.4-mysql is already the newest version (7.4.3-4ubuntu2.4). 0 to upgrade, 0 to newly install, 0 to remove and 2 not to upgrade.
mysqli.ini
通过打开终端(或使用当前打开的终端)、导航到conf.d
PHP 和 Apache 的目录并列出与 MySQL 相关的文件来确认文件存在且配置正确:cd /etc/php/7.4/apache2/conf.d ll *mysql*
你应该看到类似这样的内容:
lrwxrwxrwx 1 root root 39 5月 9 2020 10-mysqlnd.ini -> /etc/php/7.4/mods-available/mysqlnd.ini lrwxrwxrwx 1 root root 38 5月 9 2020 20-mysqli.ini -> /etc/php/7.4/mods-available/mysqli.ini lrwxrwxrwx 1 root root 41 5月 9 2020 20-pdo_mysql.ini -> /etc/php/7.4/mods-available/pdo_mysql.ini
如果您没有看到这些文件,则
php-mysql
表示安装不正确。让我们再试一次:sudo apt install --reinstall php-mysql
打开
20-mysqli.ini
文件并确保文件内容与以下内容相符:; configuration for php mysql module ; priority=20 extension=mysqli.so
重新启动Apache:
sudo service apache2 restart
如果所有内容都匹配,则打开该
mysqlnd.ini
文件。此文件必须在 之前加载,因此目录中mysqli
可能以 为前缀。确保此行前面没有。10-
extension=mysqlnd.so
;
如果到目前为止一切都符合您的配置...
⇢ 问题很可能出在应用程序代码本身,可能需要由熟悉系统的开发人员进行检查,以做出必要的更改,以适应新的技术堆栈。
我很少看到 Apache 安装需要这么多的努力,除非你正在迁移一些要求非常模糊的东西。大多数 LAMP 堆栈都非常简单,因为在过去十年左右的时间里,许多人已经使这些工具变得更容易使用。
希望这里的内容可以帮助您解决问题。