Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql_connect(localhost/127.0.0.1)在Windows平台上运行缓慢_Php_Mysql_Performance_Localhost_Mysql Connect - Fatal编程技术网

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

Php mysql_connect(localhost/127.0.0.1)在Windows平台上运行缓慢,php,mysql,performance,localhost,mysql-connect,Php,Mysql,Performance,Localhost,Mysql Connect,我使用的是Windows7、Apache2、PHP5、MySQL 5,它们都在同一台机器上。 我发现了一个有趣的问题,我有以下代码: $sql = "select * from user1"; $conn = mysql_connect("localhost", "root", "xxxxxxxx"); mysql_select_db("test1"); mysql_query("set names utf8"); $result = mysql_quer

我使用的是Windows7、Apache2、PHP5、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);
$sql=“从用户1中选择*;
$conn=mysql_connect(“localhost”、“root”、“xxxxxxxx”);
mysql_select_db(“test1”);
mysql_查询(“设置名称utf8”);
$result=mysql\u查询($sql,$conn);
while($row=mysql\u fetch\u assoc($result)){
foreach($key=>$value的行){
echo$key.“=>”$value.| |“;
}
回声“
”; } mysql_free_result($result); mysql_close($conn);
上述代码的运行时间超过1秒

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

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

我最近将我的开发从XP转移到Windows7,发现我开发的网页需要5秒钟才能加载。这当然是不可接受的,所以我必须找出问题所在。 我最终找到了有问题的函数/方法pdo::construct。我还发现mysql_connect建立连接大约需要1秒的时间。通过谷歌搜索,我发现了一个解释,说明php与IPv6有问题,您可以通过禁用IPv6或在建立连接时切换到ipaddress 127.0.0.1来解决问题


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

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

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

看起来您的MySQL服务器没有侦听该地址,而是只绑定到一个IPv4地址,因此一旦PHP无法打开连接,它就会退回,并尝试通过IPv4 aka 127.0.0.1打开localhost

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

MySQL和Apache都支持IPv6,但您必须告诉他们明确使用IPv6地址。有关MySQL,请参阅:

有关Apache配置,请参阅:


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

PHP正在尝试连接到Windows 7/8/10中的“localhost”它是::1,但MySQL没有侦听IPv6套接字,您可以应用几个修复程序:

1) 在主机文件(C:/windows/system32/drivers/etc/host)中,将localhost设置为127.0.0.1

2) 在PHP中,MySQL服务器从localhost更改为127.0.0.1

3) 在my.ini中,添加或编辑:bind address=::

如果地址为:,则服务器接受所有服务器上的TCP/IP连接 服务器主机IPv4和IPv6接口。使用此地址可同时允许 所有服务器接口上的IPv4和IPv6连接


如果您的MySQL>=5.5.3,建议的选项是:您的MySQL服务器是否运行在::1上?如果不是,php可能会尝试通过ipv6连接,如果失败,它将退回到ipv4。这需要更长的时间。很抱歉,我不明白“您的mysql服务器在::1上运行吗?”是什么意思?这是否意味着在同一台机器上运行多个mysql服务器?谢谢你的提问。我刚刚用127.0.0.1而不是localhost极大地加快了我的网站速度。我已经做了一些步骤来研究这个问题。我首先到C:/Windows/System32/drivers/etc/查看Windows主机文件,发现里面的所有信息都有注释。因此,我取消了“127.0.0.1 localhost”的注释,并执行mysql连接。执行时间大约为10毫秒。然后我回到主机文件,注释了“127.0.0.1 localhost”并取消注释:“1 localhost”。之后,我又运行了这个程序。因此,程序无法连接到mysql服务器。mysql服务器的版本为5.1.03。因此,我的结论是,问题可能是由于Mysql服务器缺乏对ipv6的支持。因此,解决方案可能是避免使用ipv6或启用MySQL服务器ipv6支持。欢迎任何建议和补充。我通过cmd使用“netstat-an”,发现有两行:“TCP 0.0.0.0:80 0.0.0.0:0侦听”和“TCP 0.0.0.0:3306 0.0.0.0:0侦听”。但是没有[:]:80或[:]:3306。这是否意味着apache和mysql都不支持ipv6?它们支持ipv6-添加了指向主要答案的链接。bind-address=::帮助了我@Marcovt不知道哪个MySQL版本?您遇到了什么错误?@Jose Nobile如果我理解正确,将不再从主机文件解析到本地主机。请参阅我的测试中的@marcovtwout,localhost跟随主机文件。无论如何,建议的选项是#3