我刚刚更改了服务器并遇到以下错误:
Fatal error: Call to undefined function mysqli_init() in /home/blacktwitter/public_html/system/database/drivers/mysqli/mysqli_driver.php on line 126
A PHP Error was encountered
Severity: Warning
Message: Cannot modify header information - headers already sent by (output started at /home/blacktwitter/public_html/system/database/drivers/mysqli/mysqli_driver.php:126)
Filename: core/Common.php
Line Number: 564
Backtrace:
A PHP Error was encountered
Severity: Error
Message: Call to undefined function mysqli_init()
Filename: mysqli/mysqli_driver.php
Line Number: 126
Backtrace:
网站在Codeigniter中。它可以很好地在一台服务器上运行,也可以在本地机器上运行。但是,当我在新服务器上传该网站时,我有错误。当然我改变了重要的参数,比如数据库连接,base_url()等。
我对数据库持怀疑态度,但我创建了一个新的数据库和用户等,并更改了连接信息。
为什么会这样?知道它是服务器上还是网站上的错误会很有帮助。另外,当我用一些测试代码创建一些index.html时,一切都很好。
答案 0 :(得分:18)
这不是你的应用程序中的错误,它只是一个缺少的驱动程序,所以,你有几个选项......
转到您的php init并取消注释以下内容:
extension=php_mysqli.dll
如果没有,请尝试在服务器上安装,具体取决于您的发行版。
尝试安装php5-mysqlnd
如果你不能通过托管限制来实现它,那么只需转移到mysql驱动程序(不需要在CodeIgniter中更改其他配置或查询或其他任何内容......)
像这样(在你的配置文件中)
$db['default']['dbdriver'] = 'mysql'; (you might have mysqli now)
答案 1 :(得分:12)
我刚刚使用ubuntu16.04
安装了php7.1
,Codeigniter 3
。
解决方案很简单(如果很难找到!)
sudo apt-get install php7.0-mysql
我意识到mysql*.ini
目录中缺少etc/php/7.1/mods-available
个文件。不确定它是怎么发生的,但这对我有用。
如果您使用7.2,只需输入sudo apt-get install php7.2-mysql
答案 2 :(得分:4)
使用此:
sudo apt-get install php7.*-mysqli
或
sudo phpenmod mysqli
sudo service apache2 restart
答案 3 :(得分:3)
这实际上不是CodeIgniter问题,而是PHP安装问题。
我已经在我的Linux服务器上安装了PHP5.6,并且很难按照使用ff命令的google搜索解决方案来安装PHP中缺少的mysqli_extension。
我尝试的是但是返回警告消息:无法找到包php5-mysqli
sudo apt-get install php5-mysqli
然而,我的php版本是5.6所以我试过
sudo apt-get install php5.6-mysqli
然后它有效。
答案 4 :(得分:1)
打开已安装PHP的文件夹,编辑php.ini
文件
取消注释此行:
extension=php_mysqli.dll
答案 5 :(得分:0)
对我来说,这是 php.ini 中的一个缺失线,解决了它,因为我将另一个 php.ini 文件复制到我的 XAMPP 安装。
值得检查行是否存在“extension=php_mysqli.dll
”(如果运行Windows,但这不适用于OP,因为它是Linux系统),或者“extension_dir
”是否存在且是否正确。
答案 6 :(得分:0)
1,apt-get install(yum,compile install)php5-mysqlnd扩展名。
2,如果不起作用,请确保加载了mysqli
root@x19-ws07-1:/etc/php5/apache2# cat /proc/31682/maps | grep mysql
如果已加载,您可以看到:
7f2cd3266000-7f2cd3285000 r-xp 00000000 fd:00 864561 /usr/lib/php5/20131226/mysqli.so
7f2cd69ef000-7f2cd6a2e000 r-xp 00000000 fd:00 864559 /usr/lib/php5/20131226/mysqlnd.so
3,如果没有加载,请使用php --ini查找配置文件
xxxx@xxxx:~$ php --ini
Configuration File (php.ini) Path: /etc/php5/apache2
Loaded Configuration File: /etc/php5/apache2/php.ini
Scan for additional .ini files in: /etc/php5/apache2/conf.d
Additional .ini files parsed: /etc/php5/apache2/conf.d/05-opcache.ini,
/etc/php5/apache2/conf.d/20-mysqli.ini
4,如果不是配置扩展,请按此配置并记住重新启动您的Web服务器
xxxx@xxxxx:~$ cat /etc/php5/apache2/conf.d/20-mysqli.ini
; configuration for php MySQL module
; priority=20
extension=mysqli.so
答案 7 :(得分:0)
在Linux中,您可以安装MySQL驱动程序扩展。
sudo apt-get install php-mysql
在使用XAMPP的Windows中,驱动程序已保存在 ext 目录中,但您需要在 php.ini 中启用它。您需要取消注释这一行:
extension=php_mysqli.dll
您还需要检查 php.ini 中的扩展程序目录位置。我使用绝对路径(而不是相对路径)声明来使其工作。
extension_dir="your\absolute\path\to\xampp\php\ext"
例如,
extension_dir="C:\xampp\php\ext"
答案 8 :(得分:0)
我试过,在/etc/php/cli/php.ini
文件的下面注释掉。
extension=php_mysqli.dll
我在AWS-EC2实例和PHP 7.0上使用Ubuntu 16.04。这解决了我的问题。
答案 9 :(得分:0)
在使用Windows的情况下,我未注释所有必需的扩展,但未加载它们。然后,我检查了php.ini中的扩展目录变量,它的名称为"ext"
,但后来我想起我之前也遇到过类似的问题。所以我所做的基本上是放置显式目录。像这样:
extension_dir = "C:\php\ext"
当然,特定的ext目录完全取决于您自己的设置和位置。
更新php.ini文件后,只需重启Apache即可应用更改。
如果您手动安装了Apache(不使用XAMPP或WAMPP等预先打包的解决方案),则只需在具有管理员权限的命令提示符或Powershell中使用这些命令。
net stop Apache2.4
net start Apache2.4
答案 10 :(得分:0)
问题是可能尚未安装php的mysql扩展,如果您使用的是php 7,只需发出以下命令并安装扩展,
sudo apt-get install php-mysql
答案 11 :(得分:0)
我知道差别不大,但对于那些运行 CentOS 的人来说:
sudo yum install php-mysqli
sudo systemctl status httpd
我们正在使用 mysqli
安装 yum
扩展,然后重新启动我们的 httpd
服务器以使更改生效,如果您不使用 httpd
,只需替换httpd
为您的服务名称。
答案 12 :(得分:-1)
如果您的网络服务器使用较低版本的MySQL运行,那么您将收到此错误,因为MySQL不支持MySQLi< 4.1.3
强烈建议使用MySQLi而不是返回MySQL扩展名。
答案 13 :(得分:-1)
我建议你做以下事情:
变化:
'dbdriver' => 'mysqli',
'dbprefix' => '',
为:
'dbdriver' => 'mysql',
'dbprefix' => '',
在database.php
档案中。