[ Kusur @ 20.07.2008. 09:46 ] @
Pozdrav svima

Već duže vreme imam sajt (PHP + MySql) koji sam napravio u pomoću DreamWeaver-a. Za konekciju sa bazom koristim, da ga tako nazovem, „DreamWeaver sistem” - DreamWeaver napravi folder Connections i u njega smesti fajl za konekciju sa bazom.

Na svakoj strani gde su potrebni podaci iz baze (upit) DreamWeaver ubacuje fajl za konekciju na ovaj način:

Code:
<?php require_once('Connections/fajl.php'); ?>


Evo sadržaja fajla za konekciju:

Code:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_fajl = "localhost";
$database_fajl = "neki_sajt";
$username_fajl = "neki_korisnik";
$password_fajl = "neka_lozinka";
$fajl = mysql_connect($hostname_fajl, $username_fajl, $password_fajl) or trigger_error(mysql_error(),E_USER_ERROR); 
?>


Ali nedavno kada sam posetio sajt video sam sledeću poruku:

Code:

Warning*: mysql_connect() [function.mysql-connect http://www.neki_sajt.com/function.mysql-connect>]: Too many connections in */usr/local/www/neki__sajt/www/Connections/fajl.php* on line *9*

*Fatal error*: Too many connections in 
*/usr/local/www/neki_sajt/www/Connections/fajl.php* on line *9*


Pisao sam administratoru da otkloni ovaj problem, što je on i uradio ali mi je napisao sledeću poruku:

Pregledali smo PHP kod koji se nalazi u fajlu fajl.php na našem hosting
serveru u Vašem direktorijumu tj. direktorijumu koji ste naveli.

U njemu nema ništa neobično jer se pravi jedna mysql konekcija ka serveru.

Ono što možemo da Vam preporučimo jeste da upotrebite funkciju koja
pravi persistant (stalnu) mysql konekciju i da fajl fajl.php pozivate iz
Vaseg PHP koda samo jednom na početku kada je potrebna konekcija, a na
kraju da pozivate fajl koji ce da raskine persistant konekciju.

Problem koji Vam se desio možemo objasniti na dva načina. Prvi je da
previše puta pozivate fajl.php fajl u Vašem kodu i tako pravite veći
broj konekcija ka serveru (u sta lično sumnjam, ali može biti), dok je
drugo objašnjenje to da je jednostavno u tom trenutku došlo do zagušenja
MySQL servera od strane svih korisnika koji imaju hosting uslugu kod
nas (ili je Vaš sajt posetilo mnogo korisnika u jednom trenutku koji su
pokrenuli pristup MySQL serveru preko sajta).

Naime, ako bi se ispostavilo da ste pozivali više puta fajl.php, onda
možemo reci da ste doprineli tome da u istom momentu, kada se Vama
problem desio, na MySQL serveru bude 100 konekcija.

Obzirom da MySQL server ima podrazumevanu vrednost od 100 konekcija
simultano, vrlo je moguće da je bilo potrebno sačekati malo i pokušati
ponovo.”


Da li je sistem za konekciju koji ja koristim dobar?

Kako da uradim ono što mi savetuje administrator „a na kraju da pozivate fajl koji ce da raskine persistant konekciju.”

Unapred hvala na savetima i odgovorima.
[ Jbyn4e @ 20.07.2008. 10:04 ] @
Pa npr. pogledas uputstvo na php sajtu, tome i sluzi:
http://www.php.net/mysql_pconnect
http://www.php.net/manual/en/features.persistent-connections.php
[ Kusur @ 20.07.2008. 10:09 ] @
Evo prelistavam PHP help.

Postoji funkcija mysql_pconnect() - stalna konekcija.

Da li da upotrebim tu komandu a na kraju svakog fajla da stavim mysql_close(). A u „PHP manual-u” piše da funkcija mysql_close() neće zatvoriti linkove otvorene sa mysql_pconnect() funkcijom - kojom funkcijom onda da zatvorim ove persist linkove?

Da li može neko da mi pomogne?

Hvala unapred



[Ovu poruku je menjao Kusur dana 20.07.2008. u 11:57 GMT+1]

[Ovu poruku je menjao Kusur dana 20.07.2008. u 11:58 GMT+1]
[ dr ZiDoo @ 20.07.2008. 12:35 ] @
Da li imas mysql_close()? Ako nemas mozda ti skripta otvara konekcije premo SQL serveru a zatvara ih timeout, pa ako imas puno posjete server ne stize na vreme da zatvara konekcije i dobijas tu gresku.
[ Jbyn4e @ 20.07.2008. 20:52 ] @
Ja sam mislio da sam na ovo odgovorio, ili mi je neko brisao poruku a da ja nisam dobio obavestenje o tome?

Dakle, procitaj first i second deo prvog linka koji sam ostavio, i videces da se kod perzistentnih konekcija ne koristi mysql_close, i da imas samo jednu stalnu konekciju ka bazi koja se zatvara sama posle timeout-a.

Ili koristi obican mysql_connect i stalno zatvaraj konekciju sa mysql_close.
[ Miroslav Ćurčić @ 21.07.2008. 12:27 ] @
A možda stvarno pozivaš više puta 'fajl.php', jes proverio?
Možda bi najlakše proverio kad bi u njega (privremeno) dodao: echo "(((((KUSUR)))))";
i kad pokreneš prebroj koliko puta ti se pojavljuje KUSUR na stranicama.
[ Nemanja Avramović @ 21.07.2008. 12:52 ] @
Zar nije elegantnije umesto svih include da stavi include_once, odnosno umesto require - require_once?
[ Miroslav Ćurčić @ 21.07.2008. 13:14 ] @
Nemanja, već sad mu tako stoji,
pomislio sam da ima mnogo frejmova/i-frejmova pa bi najlakše s echo prebrojao na stranici koliko se puta poziva.