Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Apach e2.2 + PHP 5.3 + MySQL 5.4: łączenie z bazą danych jako localhost
Forum PHP.pl > Forum > Serwery WWW > Apache
infoo1
Mam Apache 2.2, PHP 5.3 i MySQL 5.4. Gdy łączę się z bazą danych przy użyciu hosta "localhost", po minucie otrzymuję:
Cytat
Warning: mysql_connect() [function.mysql-connect]: [2002] Próba połšczenia nie powiodła się, ponieważ połšczona strona nie (trying to connect via tcp://localhost:3306) in D:\www\X\includes\class_db.php on line 11

Warning: mysql_connect() [function.mysql-connect]: Próba połšczenia nie powiodła się, ponieważ połšczona strona nie odpowiedziała poprawnie po ustalonym okresie czasu lub utworzone połšczenie nie powiodło się, ponieważ połšczony host nie odpowiedział. in D:\www\X\includes\class_db.php on line 11

Fatal error: Maximum execution time of 60 seconds exceeded in D:\www\X\includes\class_db.php on line 11


Jeśli łączę się przez host "127.0.0.1", wszystko działa. W pliku C:\Windows\System32\drivers\etc mam:
Kod
127.0.0.1       localhost
   ::1             localhost


Co jest źle?
vokiel
Zwiększ limity czasu wykonywania skryptu, czasu odpowiedzi serwera, timeout'a.

W etc wystarczy pierwsza linia
infoo1
Tego pliku w ogóle nie zmieniałem, został po webservie (bo najprawdopodobniej to on to zmienił).


A czas wykonywania skryptu jest wystarczający: 60 s.
vokiel
Cytat(infoo1 @ 9.11.2009, 21:44:34 ) *
A czas wykonywania skryptu jest wystarczający: 60 s.


Cytat
Fatal error: Maximum execution time of 60 seconds exceeded


blink.gif
infoo1
Tak, ale na zwykły skrypt wystarczy. Przecież nie będę czekać 100^1000h na połączenie z bazą. Ze 127.0.0.1 łączy od razu. Z localhost nie jest w stanie się połączyć w ciągu 60s (pewnie gdyby nie limit czasu, ładowałoby się w nieskończoność).
vokiel
A jaka masz konfiguracje httpd.conf?
Kod
Listen
ServerName


No i oczywiście pokaż jak się łączysz z bazą
infoo1
Kod
Listen 80
ServerName localhost:80


Kod
mysql_connnect('localhost','root','XXXXX');



Pojawił się jeszcze jeden problem:
W cmd->ipconfig mam jako IPv4 "192.18.1.100". Jak wchodzę na http://192.18.1.100/ pokazuje się:
Kod
Przerwane połączenie
Połączenie z serwerem zostało zresetowane podczas wczytywania strony.
Połączenie sieciowe zostało przerwane podczas negocjacji. Spróbuj ponownie.

Przy webservie działało. Porównałem httpd.conf webserva i mój - nie widzę tam niczego, co by mogło psuć połączenie przez localhost i 192.168.1.100.

Cały httpd.conf: http://wklejto.pl/46719
httpd.conf bez komentarzy i <ifmodule> (tylko to co w środku): http://wklejto.pl/46721
Cały plik my.ini: http://wklejto.pl/46725
my.ini bez komentarzy: http://wklejto.pl/46726
vokiel
Jeśli chcesz aby apache działał po wpisaniu ip komputera, to musisz na tym ip nasłuchiwać:
httpd.conf
Kod
Listen 127.0.0.1:80
Listen 192.18.1.100:80

ServerName localhost:80
ServerName 192.18.1.100:80


Teraz pozostał jeszcze plik
httpd-vhosts.conf
Kod
<VirtualHost *:80>
ServerName localhost
DocumentRoot "d:/www"
  <Directory "d:/www">
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName 192.168.1.100
DocumentRoot "d:/www"
  <Directory "d:/www">
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
infoo1
Dodałem te listen i servername, zmieniłem extra/httpd-vhosts.conf i wywaliłem hashe przed:
Kod
LoadModule vhost_alias_module modules/mod_vhost_alias.so
Include conf/extra/httpd-vhosts.conf

192.168.1.100 działa, ale MySQL po localhoście - nie:

Kod
mysql_connect('127.0.0.1','root','XXXXXX'); //Ok
mysql_connect('localhost','root','XXXXXX'); //Crash




Cytat
Warning: mysql_connect() [function.mysql-connect]: [2002] Próba po³¹czenia nie powiod³a siê, poniewa¿ po³¹czona strona nie (trying to connect via tcp://localhost:3306) in D:\www\X\includes\class_db.php on line 11

Warning: mysql_connect() [function.mysql-connect]: Próba po³¹czenia nie powiod³a siê, poniewa¿ po³¹czona strona nie odpowiedzia³a poprawnie po ustalonym okresie czasu lub utworzone po³¹czenie nie powiod³o siê, poniewa¿ po³¹czony host nie odpowiedzia³. in D:\www\X\includes\class_db.php on line 11

Fatal error: Maximum execution time of 60 seconds exceeded in D:\www\X\includes\class_db.php on line 11



Bez problemu łączę się z bazą przez MySQL Administrator (dołączone z MySQL-em) wpisując usera root, host localhost, port 3306 i hasło XXXXXX...
vokiel
Sprawdź czy firewall przypadkiem Ci nie blokuje tego portu
Zobacz co nasłuchuje na którym porcie (netstat -o, netstat -b lub nawet samo netstat)
Sprawdź czy zadziała Ci jeśli ręcznie podasz port.
Ew sprawdź w php.ini co masz w sekcji [MySQL], ustaw np mysql.default_port = 3306

Co prawda wydaje mi się, że mysql nie nasłuchuje na localhost. Temu jest timeout.
Manual pisze:
Cytat
If you want to use TCP/IP, use "127.0.0.1" instead of "localhost".

Poza tym: mysql-connect
infoo1
To pomogło: http://www.php.net/manual/en/function.mysq...nnect.php#94316 - vista jak zwykle miała swoje zdanie
Dzięki winksmiley.jpg



To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.