phpMyAdmin 缺少 mysqli 扩展。请检查 PHP 配置 的解决方案

 更新时间:2016年11月25日 14:56  点击:1630
phpMyAdmin 缺少 mysqli 扩展。请检查 PHP 配置 的解决方案 有需要的朋友可参考一下。

phpMyAdmin 缺少 mysqli 扩展。请检查 PHP 配置 的解决方案:
缺少 mysqli 扩展。请检查 PHP 配置。

打开你的php.ini->一般在C:WINDOWS目录下。
找到

 代码如下 复制代码
;extension=php_msql.dll
;extension=php_mssql.dll
extension=php_mysql.dll
extension=php_mysqli.dll

需要开启哪个扩展,就把这一行前面的分号去掉就行,注意要重启Apache 或者IIS


解决步骤:
1.看看php的ext目录中是否有php_mysqli.dll文件
如果有,继续下面的步骤。没有的话重新装个php
2.打开php.ini,找到

 代码如下 复制代码
;extension=php_mysqli.dll

把前面的分号";"去掉,改为

 代码如下 复制代码
extension=php_mysqli.dll

3.找到

 代码如下 复制代码
;extension_dir="./ext"

把前面的分号";"去掉,改为(相对于php的安装路径的ext目录)
extension_dir = "e:phpext"
e:php为php的存放目录

4.把php.ini拷贝到c:windows下

5.把libmysql.dll复制到Windows下面的System32目录(这个很关键)

6.重新启动IIS(不是网站)

cmd下运行 iisreset /RESTART 

如果上面方法还不行,可参考下面方法操作

第一步,输出 phpinfo() 看看 MySQL 模块是否成功装载,如果成功装载说明你见鬼了,否则看第二步,

IIS下phpinfo()无mysql模块是何原因?
原先用的php是.msi安装的,后来全部重来了一次,换成压缩包形式安装的。
又照着配置了php.ini,复制到winnt,复制libmysql.dll到system32。
之后测试成功。。。
第二步,查看 extension_dir 的设置是否正确
第三步,查看是否把 libmysql.dll 文件复制到 c:windowssystem32 下

1、没有正确安装Mysql数据库,在系统服务中Mysql相关的服务没有启动   (请查看正确安装Mysql的方法)


2、在系统的 system32(C:windowssystem32) 目录下缺少 libmysql.dll文件,解决方法是找到php目录下的libmysql.dll,并将libmysql.dll复制到C:windowssystem32目录中,然后重新启动Web服务。


3、在C:windows目录下的php.ini文件中,没有将“;extension=php_mysql.dll”中的前面一个“;”去掉,所以不能使用相应功能,解决方法是打开php.ini文件


4、Mysql目录没有读取权限,正确的目录权限如下:
administrator   完全控制
system    完全控制
user    读取加运行
其他的用户权限全部删除(也可保留,但安全性不高,建议删除),然后重启MYsql服务和Web服务。

 

今天把php版本升级了一下,突然就出现了Deprecated: Function set_magic_quotes_runtime() is deprecated 错误,下面我们总结了

原因分析:

最近升级了PHP版本,新版本的PHP对set_magic_quotes_runtime()已经关闭
在PHP5.3后此特性(set_magic_quotes_runtime())已经关闭。

而且在PHP6中已经完全移除此特性。


解决办法

你可以注释或者删除掉出错的行,或者是在set_magic_quotes_runtime()前面加@符号。


也可以在程序中如下操作

 代码如下 复制代码

find:
set_magic_quotes_runtime(0);

replace:
ini_set("magic_quotes_runtime", 0);

这样问题就解决了。

PHP程序员最常用的两个函数莫过于require_once和include了,通过这两个函数,我们可以使用其他类库中定义的类等对象。但很多人在使用包含相同目录下的其他文件时,仅仅简单使用下面的代码进行文件引用:

include性能

 代码如下 复制代码

include('include.php');

当然这种方式并没有错误,只不过在效率上它比下面的方式要稍稍差些:

 代码如下 复制代码

include(realpath(dirname(_FILE_)).DIRECTORY_SEPARATOR.'include.php');

这种方式我们可能需要输入更多一些,但相对于前面那种需要PHP引擎去include_path 中迭代查找所有名称为'include.php’才能查找到相应对象来说,dirname(__FILE__)这种绝对路径的指定会让系统迅速定位到相应文件。

在PHP中常量__FILE__ 其实跟C#中的AppDomain.CurrentDomain.BaseDirectory非常类似,它返回的是当前代码正在执行的代码所在文件的绝对路径。而函数dirname()则返回其父文件夹路径。

另外一个更查找效率高,并且书写简单的方式是include('./include.php'),这相当于告诉系统查找当前路径下的'include.php’文件。

在大型系统中我们常常使用另外一个更好的方式,我们常常在路由文件或其他初始化文件中加入如下代码:

 代码如下 复制代码

define('APP_PATH',realpath(dirname(_FILE_)));

这相当于给系统添加了一个全局变量来指出系统根目录,当我们后面需要引用某具体路径下的文件时我们就可以使用如下代码了:

 代码如下 复制代码

include(APP_PATH.DIRECTORY_SEPARATOR.'models'.'User.php');


autoload与include性能比较

例如有以下四个脚本:

 代码如下 复制代码
#file:include1.php
include 'include2.php';
//@todo something#file:include2.php
//@todo something#file:script1.php
include 'include2.php';
//@todo something
#file:script2.php
include 'include1.php';
include 'script1.php'
//@todo something

当执行script1.php时, include ‘include2.php’; 这行代码被执行了一次。而执行script2.php时,这行代码被执行了两次。
这里只是一个简单的例子,在实际的项目中,include2.php被include的次数可能更多。这样反复的include,是否会影响性能呢?为此我写了个脚本来测试。

 代码如下 复制代码

#file:SimpleClass.php
class SimpleClass {
        public function __construct() {
                echo get_time() . "rn";
        }
}

#file:php_include.php
for($i  = 0;$i < $loop;$i++) {
        include_once "SimpleClass.php";
        new SimpleClass();
}

当$loop值为1时,脚本耗时约0.00018906593322754秒,当$loop为1000时,脚本耗时约0.076701879501343秒。
如果我们用autoload实现呢?

 代码如下 复制代码

#file:php_autoload.php
function __autoload($class_name) {
        include_once $class_name . '.php';
}for($i  = 0;$i < $loop;$i++) {
        new SimpleClass();
}

在这段代码中,我定义了__autoload函数,几乎一样的脚本,当$loop为1时,耗时0.0002131462097168秒,而当$loop为1000时,耗时仅为前面代码的1/7,0.012391805648804秒。
但请注意看SimpleClass的代码,其中输出了一行字符串,如果去掉这行输出后再比较,会是什么样的结果呢?
在$loop同为1000的情况下,前者耗时0.057836055755615秒,而使用了autoload后,仅仅0.00199294090271秒!效率相差近30倍!
从上面的测试可以看出,当文件仅仅被include一次,autoload会消耗稍微多一点的时间,但如果在文件被反复include的情况下,使用autoload则能大大提高系统性能。
至于是否要使用autoload来解放程序员,这就仁者见仁,智者见智了。在我看来,条件允许的前提下,牺牲这一点性能(某些情况下,甚至可能是提升性能)更为便捷的开发,是值得的。


include()和require()性能


对include()来说,在 include()执行时文件每次都要进行读取和评估;

而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。

这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。

另一方面,如果每次执行代码时相读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),

因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。

在我们使用php缓存技术时会出现提示PHP class x has no unserializer 下面我们来介绍一下关于这个问题的办法。

PHP已经出到了5.3.8稳定版本,于是乎准备将公司生产服务器上的PHP从5.2.17升级到5.3.8,在测试服务器上调试的时候却发现了一个诡异的问题:

双PHP环境装好后,原先能在5.2.17正常运行的代码报错了,提示PHP class x has no unserializer,而同一套代码在同服务器上使用5.3.8则没有任何问题.Google一下了发现没有什么有用的信息,看来我是遇到冷门问题了,于是开始逐步debug检查,发现报错的地方位于使用memcache取数据的部分,在取出缓存在memcache中的数据时提示我的类没有反序列化功能,而此行代码运行在5.3.8的时候却没有任何问题. 

鉴于唯一的线索是这个反序列化的提示了,搜索了一下php官方相关序列化的信息,首先找到了序列化接口Serializable的介绍,在这里我注意到该接口有一个unserializ方法,这个是用于反序列化类时调用的借口. 同时,php的memcache扩展在把php数据对象存到memcache时是会将其序列化的,难道是我自己使用的对象没有实现Serializable接口的问题?追查了一下代码发现我存在memcache中的类是继承于Array_Object类,于是乎跑到官方Array_Object的介绍页面一看,果然如此,


如上图,Array_Object从5.3.0开始就实现了Serializable接口,而5.2是没有实现的。到这里,这个问题的原因也就明朗了,分析如下:
程序在两个版本的PHP下运行却使用同一个memcache缓存池,我先测试的是5.3.8版本,那么存进去的是PHP5.3的Array_Object对象,该对象在5.3下面可以正常序列化和反序列化,后来我又去访问了运行在PHP5.2下面的程序,这是在memcache中已经有了缓存对象,所以5.2读出来的是5.3中序列化的Array_Object对象,而在5.2中Array_Object是没有实现Serializable接口的,那么在反序列化时就会出现错误,也是就是提示PHP class x has no unserializer的原因。

解决这个问题的方法很简单,给每个程序使用不同的缓存池,避免产生数据污染和版本兼容问题。

 

PHP启动提示Unable to load dynamic library php_curl.dll怎么办 ,下面我们来看解决办法哦

这个问题容易手配PHP的时候出现, 在php.ini中正确开启了curl扩展后, 在PHPINFO中却看不到相关的信息, 而Apache的日志会显示以下错误:

PHP Warning:  PHP Startup: Unable to load dynamic library 'D:\DEV\ENV\php-5.3.10\ext\php_curl.dll' - xd5xd2xb2xbbxb5xbdxd6xb8xb6xa8xb5xc4xc4xa3xbfxe9xa1xa3rn in Unknown on line 0

什么原因造成的这个问题呢?

答案是curl扩展对库文件有依赖, 就像在Linux下面编译PHP的时候也需要安装依赖的库一样.

在PHP官网手册的Windows下安装扩展库的页面上已经详细的标注了PHP所有的扩展文件依赖那些库. 其中特别提示了以下内容 (http://php.net/manual/zh/install.windows.extensions.php)

 


有些扩展库需要额外的 DLL 才能工作。其中一部分包括在发行包里,PHP 4 中在 C:phpdlls目录下,PHP 5 中在主目录下,但还有一些,例如 Oracle( php_oci8.dll)所需要的 DLL 没有绑定在发行包里。如果安装 PHP 4,将绑定的 DLL 从 C:phpdlls拷贝到主目录 C:php中。别忘了将 C:php放到系统路径 PATH中去

 

在页面的介绍中,我们可以查询到curl扩展依赖libeay32.dll, ssleay32.dll这两个库文件, 这两个文件已经附属在PHP的Windows程序包中,我们无需去单独下载. 搞清楚了这些, 解决方法也很简单了: 让Windows或者Apache能顺利加载到这个2个dll文件即可, 下面我列出几个解决方案

方案1 将libeay32.dll, ssleay32.dll拷贝到c:windowssystem32文件夹中

方案2 将你PHP程序的目录加入到系统的PATH变量中即可

方案3 如果你使用的是Apache服务器且使用模块的方式来运行PHP的话, 可以在httpd.conf中加载PHP模块的配置语句之前加上下面两句话让Apache来加载这两个dll, 例子如下:

 代码如下 复制代码

LoadFile "D:DEVENVphp-5.3.10ssleay32.dll"
LoadFile "D:DEVENVphp-5.3.10libeay32.dll"

LoadModule php5_module "D:DEVENVphp-5.3.10php5apache2_2.dll"

[!--infotagslink--]

相关文章

  • PHP添加MongoDB扩展实例教程

    由于要使用mikoomi mongodb plugin插件,所以需要php对mongodb的扩展支持,默认通过源安装的php并没有mongodb的扩展支持,具体可以通过php -m|grep mongo 验证 。这里就结...2016-11-25
  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • phpmyadmin config.inc.php配置示例

    phpmyadmin config.inc.php配置示例...2013-09-29
  • PHP扩展开发教程(总结)

    PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行。1、线...2015-11-08
  • phpMyadmin创建数据库和设置用户权限图解

    phpmyadmin是一款很不错的WEB对mysql数据库管理软件,如果你想创建数据库与设置用户权限我们必须操作用户的很高的权限,如ROOT权限,下面我来给大家介绍介绍。 先来配...2016-11-25
  • 使用phpMyAdmin批量修改Mysql数据表前缀的方法

    多个网站共用一个Mysql数据库时,为使数据库管理不混乱,一般采用不同的网站使用不同前缀名的方式进行区分。而如何批量修改已有数据库的前缀名呢?全部导出修改后再导入?还是一个表一个表的修改?今天我要介绍的是相对简单的...2015-10-21
  • 浅谈Vue开发人员的7个最好的VSCode扩展

    这篇文章主要介绍了浅谈Vue开发人员的7个最好的VSCode扩展,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • 修改mysql密码phpmyadmin不能登录

    出现phpmyadmin不能登录是我在修改我mysql服务器密码之后导致的,后来百度了相关的原因,原来是修改了mysql密码之后我们还需要在phpmyadmin目录中去修改config.inc.php中...2016-11-25
  • PHP安装threads多线程扩展基础教程

    一、下载pthreads扩展下载地址:http://windows.php.net/downloads/pecl/releases/pthreads二、判断PHP是ts还是nts版通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说...2015-11-24
  • phpmyadmin不能登录,无任何提示的问题解决

    昨天有一朋友说自己的phpmyadmin不能登录并且无任何提示了,问我怎么解决,下面我来分享一下关于phpmyadmin不能登录问题总结. phpmyadmin不能登录没有提示 解决方法:...2016-11-25
  • Redis集群水平扩展、集群中添加以及删除节点的操作

    这篇文章主要介绍了Redis集群水平扩展、集群中添加以及删除节点的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-25
  • SpringBoot actuator 健康检查不通过的解决方案

    这篇文章主要介绍了SpringBoot actuator 健康检查不通过的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-23
  • phpMyAdmin 高级功能设置的方法图解

    phpmyadmin还有高级功能可能大部份站长不知道吧,今天本文章就来给大家介绍phpMyAdmin 高级功能设置的方法图解,希望文章对大家会有所帮助。 phpMyAdmin 安装后,默认...2016-11-25
  • phpmyadmin写入一句话木马的测试

    下面我们一起来看看一篇关于phpmyadmin写入一句话木马的测试教程,希望此教程能够对各位有帮助。 方法一,一句话木马偶尔拿到一个config中,发现是root,且还有phpmyadmi...2016-11-25
  • phpmyadmin无法登录提示please check errors given in your PHP

    下面来给各位同学介绍关于phpmyadmin无法登录提示please check errors given in your PHP and/or webserver,希望例子对各位有帮助。 今天帮别人弄网站的时候要...2016-11-25
  • Linux环境 php mcrypt扩展完全安装笔记

    mcrypt 是 php 里面重要的加密支持扩展库,Linux环境下默认是没开启的,在某些功能时,我们需要安装mcrypt扩展才能正常访问,本文就来讲讲如何完全安装这个模块。 如果你...2016-11-25
  • php安装pcntl扩展实现多进程

    pcntl中的php必须要安装pcntl才可以实现多线程了,在网上找到许多的关于pcntl安装教程,下面整理了一篇比较完整的关于php pcntl安装与使用方法。 pcntl中php实现多进...2016-11-25
  • Swift中的限定扩展详析

    扩展就是向一个已有的类、结构体或枚举类型添加新功能。下面这篇文章主要给大家介绍了关于Swift中限定扩展的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。...2020-06-30
  • IIS 环境下配置PHP5+MySql+PHPMyAdmin

    虽然主要是做.net开发的,但是,时不时的还要搞一下php,但是,php在windows下的配置,总是走很多弯路,正好前几天又配置了一下,因此总结在这里,做为自己的备忘,也希望给遇到问题的朋友们提供一些帮助。...2016-01-27
  • phpmyadmin无法登陆无响应问题解决办法

    phpmyadmin无法登陆无响应一般是session或cookie设置问题了,下文小编也是因为cookie与 session目录设置问题导致phpmyadmin不能正常登录了。 之前由于修改php.ini...2016-11-25