Tud valaki valamit arról, PHP 7 alatt mi a különbség a localhost és a 127.0.0.1 host között MySql kapcsolat létrehozásánál?
A joomla konfigjában ha a host="localhost", akkor nem képes kapcsolódni a mysql szerverhez, de ha a host="127.0.0.1", akkor gond nélkül felcsatlakozik. Ugyanez a joomla 5.6-os PHP-val problémamentesen használja a host="localhost" konfigurációt, tehát PHP specifikusnak tűnik a dolog.
Rémlik, hogy tán a mysql a host-tól függően tcp vagy socket kapcsolatot hoz létre, de így sem értem, miért függhet ez a PHP verziójától. (Mind az 5.6, mind a 7.1 cgi módban futtatott, helyben fordított php.)
- 1717 megtekintés
Hozzászólások
Egy biztos: a MySQL-nél a "localhost" általában helyi socket fájlos kapcsolódást jelent, arról fogalmam sincs hogy esetleg némely PHP verzió (de inkább beállítás lesz) miért viselkedhet másként...
- A hozzászóláshoz be kell jelentkezni
Azt nem írtam, hogy mindkét php verzió ugyanazt a php.ini-t használja, a környezet elvileg ugyanaz.
- A hozzászóláshoz be kell jelentkezni
Ez nem csak php 7 alatt van hanem altalaban php-nal, es jol emlekszel, 127.0.0.1 eseten TCP portra fog probalkozni kapcsolodni, mig localhost-nal socketre.
- A hozzászóláshoz be kell jelentkezni
Éppen emiatt érdekes, hogy 5.6-os PHP alatt jól működik a localhost, 7.1-es alatt nem.
- A hozzászóláshoz be kell jelentkezni
ping mit mond?
- A hozzászóláshoz be kell jelentkezni
5.6 alatt vagy 7.1 alatt? :)
Mit pingessek? A localhostot?
- A hozzászóláshoz be kell jelentkezni
ping egy parancs az op rendszer alatt. Nem függ a php-tól.
ping localhost
- A hozzászóláshoz be kell jelentkezni
Azért kérdeztem, hogy melyik PHP alól, mert az egyikkel működik, a másikkal nem.
Egyébként parancssorból megy a ping.
- A hozzászóláshoz be kell jelentkezni
Csak egy sanda gyanúm van, elképzelhető, hogy hülyeség.
Lehetséges, hogy a "localhost" a ::1 IPv6 címre oldódik fel, a MySQL viszont 127.0.0.1 IPv4 címen hallgatózik, ezért nem sikerül csatlakoznia.
- A hozzászóláshoz be kell jelentkezni
+1
Többször 0ptunk már mi is azzal, hogy főleg Win7 (de állítólag más OS is képes rá) egyes esetekben alapból IPv6-ra old fel, amit aztán az azt megkapó program vagy tud kezelni vagy nem (leginkább nem).
Persze ettől még a php-hez nem értek...
--
Debian 8.8 Jessie, Android 6.0.1 Marshmallow, OpenWrt 15.05.1 Chaos Calmer, Armbian 5.24, Free MC Boot 1.953+OPL 0.9.78-DB, Boyue C60 20140410 (Gentoo)
- A hozzászóláshoz be kell jelentkezni
És itt szopok vele ma is... ismét, megint... pedig tegnap itt meséltem róla... noooooormáális???? Soha többet nem írom le hogy "localhost"
Egyébként mostanában változott ezzel kapcsolatban valami? Eddig csak Win7-en láttam olyat hogy a localhostot IPv6-on oldja fel, de mostanában több kolléga is panaszkodik, hogy náluk is megjelent a jelenség (Win7-Win10 vegyesen).
--
Debian 8.8 Jessie, Android 6.0.1 Marshmallow, OpenWrt 15.05.1 Chaos Calmer, Armbian 5.24, Free MC Boot 1.953+OPL 0.9.78-DB, Boyue C60 20140410 (Gentoo)
- A hozzászóláshoz be kell jelentkezni
Ha nem akarsz ipv6-ot, kapcsold ki.
- A hozzászóláshoz be kell jelentkezni
Aztán meg majd nem értjük, hogy van az, hogy a fejlesztői gépen megy a program, az ügyfélnél meg nem... :D
--
Debian 8.8 Jessie, Android 6.0.1 Marshmallow, OpenWrt 15.05.1 Chaos Calmer, Armbian 5.24, Free MC Boot 1.953+OPL 0.9.78-DB, Boyue C60 20140410 (Gentoo)
- A hozzászóláshoz be kell jelentkezni
Ugyan olyan szoftver környezetnek kell lennie a fejlesztésben mint az ügyfélnél.
Viszont az ipv6 permanens tiltása azért is szükséges, mert by design azzal fog előbb próbálkozni ha engedélyezve van.
Vagy át kell állni ipv6ra ;)
- A hozzászóláshoz be kell jelentkezni
Ugyan olyan szoftver környezetnek kell lennie a fejlesztésben mint az ügyfélnél.
Na ezért nem lesz letiltva nálunk...
Vagy át kell állni ipv6ra
Hát ez nem kívánságműsor...
--
Debian 8.8 Jessie, Android 6.0.1 Marshmallow, OpenWrt 15.05.1 Chaos Calmer, Armbian 5.24, Free MC Boot 1.953+OPL 0.9.78-DB, Boyue C60 20140410 (Gentoo)
- A hozzászóláshoz be kell jelentkezni
Igen, a 'localhost' jelenthet 127.0.0.1 -et és/vagy ::1-et.
- A hozzászóláshoz be kell jelentkezni
Ez nagyon jó ötlet, eszembe sem jutott, és illene is a PHP fejlődéséhez. De sajna a gépen tiltva van minden ipv6 eszköz és kezelés. Ennek ellenére, lehet, hogy a PHP7 ::1-re oldja fel, és akkor tényleg nem sikerülhet kapcsolódnia. Tesztelhető ez valahogy? Van joga a PHP-nek máshogy feloldania a localhost-ot, mint a rendszernek alatta?
- A hozzászóláshoz be kell jelentkezni
Bár nem vagyok túl nagy PHP mágus, de megpróbálhatnád printelni a gethostbyname("localhost"); kimenetét.
Edit: hülyeséget írtam, ez mindenképp IPv4 címet fog visszaadni.
Valahogy ki kellene derítened, hogy a MySQL konnektorod hogyan oldja fel a hostnevet, vagy elkérni tőle, mire oldja fel.
- A hozzászóláshoz be kell jelentkezni
Próbáld ki a mysql klienssel tudsz-e kapcsolódni:
mysql -u root -p
és
mysql -u root -p -h 127.0.0.1
még akkor is elpukkan, ha csak a portot definiálod és ragaszkodik a sockethez:
mysql -u root -p -P 3307 #(itt figyelmen kívül hagyja a portot és megy a socketre, porttól függetlenül, szívtam is már miatta párszor)
mysql -u root -p -h 127.0.0.1 -P 3307 # így működik ahogy elvárja az ember
Az ipv6-os feloldás lehet gond, bár még ilyesmivel nem találkoztam.
Nem joomlázok, de a PDO és mysqli kiterjesztések viselkedése szinte mindig ugyanazok, mint a normál paranccsoros mysql kliensé.
A gethostbyname azért nem jó, mert az a PHP mechanizmusaival oldja fel a dns-t, nem csak átdobja a PDO-nak / mysqli-nek ami végül előfordulhat hogy teljesen más módon fog kapcsolódni a saját libjeivel.
Debugra esetleg megpróbálhatsz összedobni egy egyszerű kapcsolódást, amivel elkapdosod / kidumpolod az Exceptionöket, hátha van benne valami használható információ:
http://php.net/manual/en/pdo.connections.php
- A hozzászóláshoz be kell jelentkezni
Az okot hirtelen nem tudom, de php doksi kommentek kozott:
> I'd like to point out that in PHP 7.0 in the dsn parameter you can't use 'host=localhost' to solve this you can use 'host=127.0.0.1' instead.
- A hozzászóláshoz be kell jelentkezni
Azért örülök neki, hogy nem az én környezetemben van a probléma forrása.
- A hozzászóláshoz be kell jelentkezni