PDA

Pogčedajte punu verziju : PHP, Apache - I want to get out


analyzer
17. 03. 2007., 13:19
Pozdrav svima redom, da ne nabrajam.
Ovo je moje prvo postovanje na dev pro talk-u a po Ilijinom nagovoru :1064:
Evo i mog problema...
Napravio sam program u php-u i na računaru korisnika ga instaliram nakon instaliranja apache-a, mysql servera i php-a.
Program radi u lokalu i radi bez problema. Medjutim, kao i svaki drugi program i njemu treba update a ja sam funkciju update-a zamislio na sledeci nacin.

1. korisnik otvara update stranicu u lokalu (localhost )-ovo radi
2. uz par mysql instrukcija skript definise promjenjive na osnovu vrijednosti iz lokalnih tabela.(i ovo radi)
3.nakon definisanja promjenjivih program treba da se kaci na moj sajt i da uradi par querija na bazi koja je na internetu a na osnovu promjenjivih koje su mu zadate u lokalu.
E OVO NE RADI.
Nije greska u skriptu jer nece nikako da se poveze sa stranice u lokalu na server i da izvuce bilo kakve podatke, a to mi je neophodno ako hocu da uporedim verziju koju klijent ima sa najnovijom verzijom.

eto... ako nisam dovoljno objasnio pitajte... visicu po forumima dok ne nadjem odgovor.:1074:
Pozdrav svima

LiquidBrain
17. 03. 2007., 13:52
Pogledaj u konfiguraciji mysql servera kome pristupash u lokalu, kako je definisan korisnik sa kojim se logujesh.

Verovatno je definisan kao korisnik@localhost, ako jeste ti ga lepo definishi kao
korisnik@hostname
gde je hostname ime mashine na kome se izvrsava skripta. Pa javi ako jeste :)

Pozdrav.

Ilija Studen
17. 03. 2007., 14:02
Uopšte nema potrebe da se remotely kači na bazu.

Većina biblioteka za parsiranje XML-a ima mogućnost da otvori URL (može preporuka za dobar XML parser na PHP4; za PHP5 je SimpleXML (http://php.net/simplexml) standard) pod uslovom da je PHP-u odobren izlaz na net. Tehnički, možeš da uradiš nešto slično ovome:

$xml = simplexml_load_file('http://www.sajt.com/check.php?local_version=0.19');
// do something with data

Na svom sajtu imaš skripticu koja na osnovu parametara prenetih kroz GET određuje da li korisnik ima aktuelnu verziju, da li mu je licenca istekla itd.

Ovde je moguće imati par problema:

1. Ima milion različitih načina na koje PHP setupovan i u nekim slučajevima jednostavno nemaš izlaz na net. Jako čest slučaj kod kompanijskih mreža, posebno u USA.
2. Ne bih ovo koristio za proveru ispravnosti licence. Taj kod bi trebalo da bude ugrađen u samu aplikaciju.

LiquidBrain
17. 03. 2007., 14:06
Ja se izvinjavam, propustio sam deo gde se program kazi na tvoj sajt.

analyzer
17. 03. 2007., 14:07
oho...evo ga lav.
vidi, meni nije problem to sa setovanjem php-a, jer ja ga distribuiram i on ostaje takav.
aplikacija ne ide sama vec uz neki vid moje asistencije kod korisnika, a niko od njih nema, ali ponavljam (sad sam ko draskovic) NEMA ni mysql ni php niti bilo sta nalik tome.
ja dolazim na cistu masinu koja nema niti je radila sa bazama.
ih bre ilija...nije ovo moje aC :)

analyzer
17. 03. 2007., 14:08
nije u pitanju mysql.
ja pokusavam da se nakacim regularno na remote bazu sa potpuno ispravnim parametrima iz lokala.
ako promenim bilo sta u mysql-u u lokalu, onda lokal nece raditi-

analyzer
17. 03. 2007., 14:10
nego, ilija, deder ti meni objasni malo to poblize...php i izlaz na net...

BrainDamage
17. 03. 2007., 16:21
nije u pitanju mysql.
ja pokusavam da se nakacim regularno na remote bazu sa potpuno ispravnim parametrima iz lokala.
ako promenim bilo sta u mysql-u u lokalu, onda lokal nece raditi-

Pa, problem i jeste oko konekcije na remote server. Korisnik za remote MySQL server je verovatno dodat kao user@localhost, sto znaci da server dozvoljava konekcije samo "sa samog sebe", a ne i izvana - sto je slucaj koji je potreban tebi, radi update-ovanja. Nema potrebe da bilo sta menjas na client racunarima...

edit: resenje su ti vec naveli:
1) dozvoli na remote serveru kacenje sa remote masina - za svaki remote host poseban user (recommended, ali pada u vodu ako klijenti nemaju staticke IP adrese, i guess...), ili da postojecem korisniku izmenis privilegije i dozvolis kacenje sa bilo kog host-a (nije bas preporucljivo...)
2) Ilijino resenje - XML. Cini mi se da je malo izvikano ovo oko "izlaza napolje" jer jos nisam naleteo na konfiguraciju koja je zabranjivala otvaranja remote fajlova (osim mozda tamo gdje PHP radi u safe modu). Svejedno, ti odrzavas klijent masine tako da... :)

analyzer
17. 03. 2007., 16:47
Pa, problem i jeste oko konekcije na remote server. Korisnik za remote MySQL server je verovatno dodat kao user@localhost, sto znaci da server dozvoljava konekcije samo "sa samog sebe", a ne i izvana - sto je slucaj koji je potreban tebi, radi update-ovanja. Nema potrebe da bilo sta menjas na client racunarima...

edit: resenje su ti vec naveli:
1) dozvoli na remote serveru kacenje sa remote masina - za svaki remote host poseban user (recommended, ali pada u vodu ako klijenti nemaju staticke IP adrese, i guess...), ili da postojecem korisniku izmenis privilegije i dozvolis kacenje sa bilo kog host-a (nije bas preporucljivo...)
2) Ilijino resenje - XML. Cini mi se da je malo izvikano ovo oko "izlaza napolje" jer jos nisam naleteo na konfiguraciju koja je zabranjivala otvaranja remote fajlova (osim mozda tamo gdje PHP radi u safe modu). Svejedno, ti odrzavas klijent masine tako da... :)
hmmm...ali to je vec dozvoljeno. dakle, dozvolio sam kacenje na remote server i to wild cardom, sto opet nije to.
dakle, cisto da sumiram:
na remote hostu dozvoljeno je kacenje na mysql bazu sa bilo kog host-a.
u lokalu,(ne radim u safe modu), je sve definisano kako treba.
Poruka koju mi izbaci je da ne moze da se poveze na bazu(a i ta poruka je definisana u lokalu :))
cisto da napomenem...
na bazu se kacim uz pomoc navicat-a i uz potpuno iste parametre koji su navedeni na web stranici(koja se otvara u lokalu) i navicat prolazi.

Petar Marić
17. 03. 2007., 16:56
Da kojim slučajem niste iza proxy-a?

BrainDamage
17. 03. 2007., 17:01
A, da nemas kakav overwrite varijabli u toj update skripti, ako se kacis istovremeno i na obe baze pa... ili si hardcode-ovao parametre u mysql_connect i mysql_select_db? Sta tacno kaze die(mysql_error()), access denied? Firewall? Ostajem bez ideja, gadno je ovako "na daljinu" pogadjati...

analyzer
17. 03. 2007., 19:43
A, da nemas kakav overwrite varijabli u toj update skripti, ako se kacis istovremeno i na obe baze pa... ili si hardcode-ovao parametre u mysql_connect i mysql_select_db? Sta tacno kaze die(mysql_error()), access denied? Firewall? Ostajem bez ideja, gadno je ovako "na daljinu" pogadjati...
evo parceta koda
$dbh=mysql_connect("ip", "user", "pass") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db("baza",$dbh);
Najcudnije je sto mi uopste ne daje koja greska je u pitanju.
samo napise da ne moze da se konektuje i to je to...nema opisa greske.
vidi se da pokusava da se nakaci, odziv je sporiji.
sto se tice price o proxy-ju, ne znam da li sam iza nekog. kacim se preko telenorove mreze (GPRS).
opet...cudi me da ako je definisano na serveru da host moze biti bilo ko...zasto ne prolazi. A prolazi sa istim parametrima kad se kacim preko Navicat-a direktno na bazu...
Evo sta sam ja pokusao...
Analizirao sam malo Apache-ov konfiguracioni fajl... posebno odeljke o LISTEN i BINDADDRESS... recimo da bi Apache pored lokalhosta trebalo da osluskuje i hostove koje sam naveo...medjutim, cim unesem IP i aktiviram apache on se podigne ali ne radi bukvalno nista. Nema odziva na localhostu.
hmmm... ajde ako neko od vas moze, nek napravi stranicu kod sebe u lokalu i sa parametrima proba sa te stranice da se poveze na remote bazu i iscita nesto iz nje... ja bukvalno nemam nikakvu ideju vise.

ivanhoe
18. 03. 2007., 00:14
ne ispise nikakav mysql_error ? Da li pukne na connect ili na select baze?

nema ovo veze sa apachom, ti se iz php-a kacis na mysql (ako sam dobro shvatio), php kod klijenta mora da ima dopusteno otvaranje socketa, a tvoj mysql da ima definisanog usera `username`@`%` i to je sve...

proveri u php.ini-ju mysql.connect_timeout, po defaultu je setovano na 60 sekundi, mozda je to prekratko...takodje vidi na klijentu da ne timeoutuje connection...

takodje probaj da stavis error_reporting(E_ALL) na pocetak skripte, mozda postoji neki notice ili warning koji ne vidis..

Uzgred moja ti je proporuka malo drugaciji pristup: napravi web service za update: umesto da se skript kaci direktno na bazu, napravi kod sebe na serveru skript koji uzme podatke od remote skripte, proveri sta treba u bazi i vrati mu uputstvo za update.
To je mnogo sigurnija varijanta, ne treba pustati svakog da ti pristupa bazi, mozda neko od tih klijenata ima klinca koji zna malo php-a, a dosadno mu je..

Mr.Paja
18. 03. 2007., 07:06
Da ne zeza mozda firewall ?

analyzer
18. 03. 2007., 19:59
evo, uz nesebicnu pomoc druga 35-68 na rjesavanju ovog mog problema skontali smo neke stvari...
Kao prvo, on je uspeo da se poveze na moju remote bazu sa lokalne stranice...znaci da su parametri za pristup na serveru ispravni.
Ja NISAM USPJEO DA SE KONEKTUJEM NA SOPSTVENI SERVER ....eh ironijo.

Kao drugo...
upgradeovao sam mysql bazu u lokalu na peticu i i dalje ne radi.
i kao trece i najbitnije...
drug 35-68 nije iza proxy-ja A JA JESAM.
Da li je to problem?
Ostaje mi jos samo jedno , a to je da upgrejdujem php.

Petar Marić
18. 03. 2007., 22:06
AFAIK PHP ne zna sam da prođe kroz proxy. Izlgeda da ćeš morati da radiš direktno sa TCP socket-ima ;)

ivanhoe
19. 03. 2007., 01:04
moze php da izadje na kraj sa proxijem i direktno preko wrapper funkcija, evo vise detalja: http://www.php.net/manual/en/wrappers.http.php
pogledaj pod Table N.3. Context options, postoji proxy parametar..

a moze i da se koristi curl...

analyzer
19. 03. 2007., 08:27
EVO ZAKLJUCAKA.
Naime, 36-68 mi je poslao jedan zanimljiv tekst sto se tice mog problema.
ukratko, u pitanju je verzija php-a koju koristim i verzija mysql koja se nalazi na remote serveru.
Koga interesuje da procita evo i linka:
http://www.whoopis.com/howtos/mysql-auth-fix.html

LiquidBrain
19. 03. 2007., 09:16
EVO ZAKLJUCAKA.
Naime, 36-68 mi je poslao jedan zanimljiv tekst sto se tice mog problema.
ukratko, u pitanju je verzija php-a koju koristim i verzija mysql koja se nalazi na remote serveru.
Koga interesuje da procita evo i linka:
http://www.whoopis.com/howtos/mysql-auth-fix.html

Ovo pishe u manualu za instaliranje mySQL...

analyzer
19. 03. 2007., 21:51
Ovo pishe u manualu za instaliranje mySQL...
:)
Aha...
Fakat mi zao sto sam Vas bezveze povlacio... Pass hashing...
U svakom slucaju, hvala vam svima...da ne nabrajam.
Pozdrav