mysql_connect ("localhost / 127.0.0.1) lent sur plate-forme Windows
Je suis avec Windows 7, Apache 2, PHP 5, MySQL 5, tous sont sur la même machine.
J'ai trouvé un intéressant problème, j'ai le code suivant:
$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);
Le temps d'exécution du code ci-dessus est de plus de 1 seconde.
Lorsque j'utilise 127.0.0.1
au lieu de localhost
, le temps d'exécution est d'environ 10 ms.
J'ai essayé de trouver la raison sous-jacente sur l'internet, et voici le résultat:
J'ai récemment déménagé de mon développement de XP à Windows 7 et a constaté que les pages web, j'avais été prendre 5 secondes pour charger. Cette situation était inacceptable de cours donc j'ai eu à traquer le problème.
Finalement, j'ai traqué la délinquance de la fonction/méthode pdo::construire. J'ai aussi trouvé que mysql_connect prenait environ 1 seconde pour effectuer une connexion. Après un peu de recherche sur google, j'ai trouvé l'explication que php a eu des problèmes avec l'IPv6 et que l'on pourrait résoudre le problème en désactivant l'IPv6 ou la commutation à l'adresse ip 127.0.0.1, lors de votre connexion.
Je me demande ce que la question de l'IPv6 sur PHP, veulent juste pour obtenir une meilleure understaning. Merci.
- Votre serveur mysql sur ::1? Si pas de php sera probablement tentative de connexion via ipv6 et, si cela échoue, il en sera de retour à l'ipv4. Que devrait exiger un peu plus de temps.
- Désolé pour ce que je ne comprends pas ce que "Est votre serveur mysql sur ::1?" signifie? Est-il signifiait que l'exécution de plusieurs serveurs mysql sur la même machine?
- Merci pour cette question. J'ai juste accéléré mon site web énormément en utilisant 127.0.0.1 au lieu de localhost.
Vous devez vous connecter pour publier un commentaire.
PHP tente d'ouvrir une connexion à localhost. Parce que votre ordinateur est connecté à votre réseau via l'IPv6 c'est d'essayer de l'IPv6 version de 'localhost' première, qui est qui est de l'adresse IP ::1
http://en.wikipedia.org/wiki/IPv6_address#Special_addresses
Il ressemble à votre serveur MySQL n'est pas en écoute à cette adresse, au lieu de cela, il est seulement lié à une adresse IPv4 et donc, une fois que PHP ne parvient pas à ouvrir la connexion, il tombe en arrière et essaie d'ouvrir localhost via IPv4 aka 127.0.0.1
Personnellement, je préfère utiliser des adresses IP ou de l'utilisation de l'éther le fichier hosts de Windows ou équivalent Mac pour définir "faux" noms de domaine et ensuite utiliser ces lors de la connexion à MySQL, qui résoudre les adresses IP. De toute façon, je peut savoir exactement si une adresse IPv4 ou IPv6 sera utilisé.
MySQL et Apache en charge le protocole IPv6, mais vous devez leur dire d'utiliser une adresse IPv6 de manière explicite. Pour MySQL, voir:
http://dev.mysql.com/doc/refman/5.5/en/ipv6-server-config.html
Pour la config d'Apache, voir:
http://httpd.apache.org/docs/2.2/bind.html
Apache prend en charge de multiples adresses IP de sorte que vous pouvez utiliser les deux à la fois - si la carte réseau de la machine est à la fois une adresse IPv4 et IPv6. MySQL ne supporte qu'un seul adresse.
PHP essaie de se connecter à localhost" dans Windows 7/8/10 c'est ::1, mais MySQL n'est pas à l'écoute sur IPv6, vous pouvez appliquer plusieurs correctifs:
1) Dans votre fichier host (C:/windows/system32/drivers/etc/host) ensemble localhost 127.0.0.1
2) En PHP, le serveur MySQL changement de localhost 127.0.0.1
3) Dans mon.ini, ajouter ou à modifier: bind-address = ::
Suggéré option si vous avez MySQL >= 5.5.3