gpt4 book ai didi

php - mysql_connect (localhost/127.0.0.1) 在 Windows 平台上运行缓慢

转载 作者:IT老高 更新时间:2023-10-28 23:49:39 25 4
gpt4 key购买 nike

我正在使用 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 毫秒。

在网上找了下原因,结果是这样的:

I recently moved my development from XP to Windows 7 and found that webpages I had developed were taking 5 seconds long to load. This was unacceptable of course so I had to track down the problem. I eventually tracked down the offending function/method pdo::construct. I also found that mysql_connect was taking about 1 second to make a connection. After a little googling I found an explaination that php had issues with IPv6 and that you could fix the problem by either disabling IPv6 or switching to the ipaddress 127.0.0.1 when making your connection.

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

最佳答案

PHP 正在尝试打开到本地主机的连接。因为您的计算机通过 IPv6 连接到您的网络,所以它首先尝试“localhost”的 IPv6 版本,这是::1 的 IP 地址

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

::1/128 — The loopback address is a unicast localhost address. If an application in a host sends packets to this address, the IPv6 stack will loop these packets back on the same virtual interface (corresponding to 127.0.0.0/8 in IPv4).

看起来你的 MySQL 服务器没有监听那个地址,而是只绑定(bind)到一个 IPv4 地址,所以一旦 PHP 无法打开连接,它就会回退并尝试通过 IPv4 aka 127.0.0.1 打开本地主机

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

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

有关 Apache 配置,请参阅: http://httpd.apache.org/docs/2.2/bind.html

Apache 支持多个 IP 地址,因此您可以同时使用这两个地址 - 如果机器中的网卡同时具有 IPv4 和 IPv6 地址。 MySQL 只支持一个地址。

关于php - mysql_connect (localhost/127.0.0.1) 在 Windows 平台上运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com