当前位置: 首页 > 面试题库 >

在Windows平台上mysql_connect(localhost / 127.0.0.1)缓慢

秦皓君
2023-03-14
问题内容

我正在使用Windows 7,Apache 2,PHP 5,MySQL 5,它们都在同一台计算机上。我发现了一个有趣的问题,我有以下代码:

    $sql = "select * from user1";
    $conn = mysql_connect("localhost", "root", "xxxxxxxx");
    mysql_select_db("test1");
    mysql_query("set names utf8");
    $result = mysql_query($sql, $conn);
    while ($row = mysql_fetch_assoc($result)){
        foreach ($row as $key => $value){
            echo $key." => ".$value." || ";
        }
        echo "<br/>";
    }
    mysql_free_result($result);
    mysql_close($conn);

以上代码的运行时间超过1秒。

当我使用127.0.0.1而不是时localhost,运行时间约为10毫秒。

我试图在互联网上找到根本原因,结果是:

最近,我将开发从XP迁移到Windows
7,发现我开发的网页加载时间长达5秒。这当然是不可接受的,所以我不得不找出问题所在。我最终找到了令人讨厌的功能/方法pdo ::
construct。我还发现mysql_connect大约需要1秒才能建立连接。经过一番谷歌搜索后,我发现一种解释,说明php的IPv6存在问题,您可以通过在建立连接时禁用IPv6或切换到ipaddress
127.0.0.1来解决此问题。

我想知道PHP上IPv6的问题是什么,只是想更深入地了解。谢谢。


问题答案:

PHP正在尝试打开与localhost的连接。由于您的计算机是通过IPv6连接到网络的,因此它首先尝试使用IPv6版本的“
localhost”,即IP地址为:: 1。

http://en.wikipedia.org/wiki/IPv6_address#Special_addresses

:: 1/128
—环回地址是单播本地主机地址。如果主机中的应用程序将数据包发送到该地址,则IPv6堆栈会将这些数据包循环回同一虚拟接口上(对应于IPv4中的127.0.0.0/8)。

看起来您的MySQL服务器没有在监听该地址,而是仅绑定到IPv4地址,因此,一旦PHP无法打开连接,它将回退并尝试通过aka
127.0.0.1的IPv4打开本地主机

我个人更喜欢使用IP地址或使用Windows主机文件或等效于Mac的Mac来定义“假”域名,然后在连接到可解析为IP地址的MySQL时使用这些域名。无论哪种方式,我都可以确切知道将使用IPv4还是IPv6地址。

MySQL和Apache都支持IPv6,但是您必须告诉他们明确使用IPv6地址。对于MySQL,请参见:http : //dev.mysql.com/doc/refman/5.5/en/ipv6-server-
config.html

对于Apachehtml" target="_blank">配置,请参见:http :
//httpd.apache.org/docs/2.2/bind.html

Apache支持多个IP地址,因此,如果计算机中的网卡同时具有IPv4和IPv6地址,则可以一次使用这两个地址。MySQL仅支持一个地址。



 类似资料:
  • 本文向大家介绍mysql_connect localhost和127.0.0.1的区别(网络层阐述),包括了mysql_connect localhost和127.0.0.1的区别(网络层阐述)的使用技巧和注意事项,需要的朋友参考一下 connects.php 使用strace获取系统调用: Socket原本是为网络通讯设计的,但后来在Socket的框架上发展出一种IPC机制,就是UNIX Dom

  • 1、下载 Windows 版的 OpenResty 压缩包,这里我下载的是 openresty_for_windows_1.7.10.2001_64bit ,你也可以选择 32bit 的版本。如果你对源码感兴趣,下面是源码地址 https://github.com/LomoX-Offical/nginx-openresty-windows。 2、解压到要安装的目录,这里我选择D盘根目录,你可以根据

  • 我正在mac电脑上使用和。我发现将绑定到而不是。默认情况下,也将绑定到此地址。我仍然可以通过。但是对于,默认设置(例如0.0.0.0:4000)似乎需要访问Internet。没有Internet,我无法运行。它是一只小虫子吗? 我也使用流浪汉。我已设置端口转发(8080)= 有人能解释0.0.0.0、127.0.0.1和localhost?之间的区别吗?有人能解释为什么差异会导致这个问题吗?

  • 我是新来Tarantool的。我想通过ODBC驱动程序在第三方应用程序如Tableau、Power BI中连接Tarantool数据库。 请回答我下面的问题。 1)我想在Windows 10平台上运行Tarantool数据库服务器。有没有可能安装Tarantool在windows平台?如果是,请提供步骤并提供链接,在那里我可以下载Windows的Tarantool,以及如何进一步创建数据库。 2)

  • 本文向大家介绍Windows平台上的Perl安装,包括了Windows平台上的Perl安装的使用技巧和注意事项,需要的朋友参考一下 Perl发行版可用于多种平台。您只需要下载适用于您的平台的二进制代码并安装Perl。 如果平台的二进制代码不可用,则需要C编译器来手动编译源代码。在安装所需的功能选择方面,编译源代码可提供更大的灵活性。 以下是在Windows计算机上安装Perl的步骤。 请在Wind

  • 工具准备 Visual Studio 2015,我们已在 Visual Studio 2015 上做了版本功能的完整验证,建议用户使用此IDE,以防止由于版本不同引发编译或运行错误。下载参见:官网页面,Visual Studio 2015 发布页面。 cocos2d-x v3.17,下载后解压,下载参见:Cocos官网页面 配置步骤 双击 cocos2d-x-3.17\build\cocos2d-