Jak zabránit paralelnímu zpracování PHP skriptu na serveru?

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Dynalon
Začátečník
Začátečník
Registrován: 27. črc 2005
Kontaktovat uživatele:

Jak zabránit paralelnímu zpracování PHP skriptu na serveru?

Příspěvek od Dynalon »

Dobrý den měl bych dotaz - dá se nějakým jednoduchým způsobem zabránit tomu aby uživatel několikanásobným klepnutím např na tlačítko submit ve formuláři vyvolal ten samý PHP skript? (skript běží zpravidla několik vteřin a pracuje s DB MySQL). Každá instance skriptu ovlivňuje ty samé data v DB a způsobuje nelogické chování systému (některé dotazy se asi ani neprovedou).
Jasper
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 25. úno 2004
Kontaktovat uživatele:

Příspěvek od Jasper »

nekde sem videl javascript kod, kteryy po kliknuti na tlacitko odeslat nasledne toto tlacitko deaktivoval...

tady na teto stranc to tak je reseno, tak si to z tama nejak vyextrahuj...
http://gosms.cz/sms.php
Dynalon
Začátečník
Začátečník
Registrován: 27. črc 2005
Kontaktovat uživatele:

Příspěvek od Dynalon »

Ten odkaz http://gosms.cz/sms.php nějak nefunguje ale i tak řešení v JS je nespolehlivé protože uživatel si může stránku uložit a kód pozměnit - spíš by mě zajímalo jestli neexistuje nějaké řešení v PHP kde to nemá uživatel možnost ovlivnit.
next_ghost
Začátečník
Začátečník
Registrován: 12. kvě 2005
Bydliště: Chomutov
Kontaktovat uživatele:

Re: Jak zabránit paralelnímu zpracování PHP skriptu na serve

Příspěvek od next_ghost »

Dynalon píše:Dobrý den měl bych dotaz - dá se nějakým jednoduchým způsobem zabránit tomu aby uživatel několikanásobným klepnutím např na tlačítko submit ve formuláři vyvolal ten samý PHP skript? (skript běží zpravidla několik vteřin a pracuje s DB MySQL). Každá instance skriptu ovlivňuje ty samé data v DB a způsobuje nelogické chování systému (některé dotazy se asi ani neprovedou).
Nejsnadnější by asi bylo udělat si v DB tabulku na timeout. Hned na začátku skriptu se zkontroluje, jestli uživatel nemá aktivní timeout a zapíše se novej timeout (třeba 2 vteřiny). Když aktivní timeout neni, skript proběhne, jinak chcípne.
Jasper
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 25. úno 2004
Kontaktovat uživatele:

Příspěvek od Jasper »

nebo si na strance s formularem nastavis do session nejakou hodnotu a v souboru, ktery zpracovava data provedes kotrolu jestli v session ta hodnota skutecne je a v tom pripade ulozis data a hned tu hodnotu smazes... V pripade ze session nastavena neni, tak presmerujes zpatky na formular...
Dynalon
Začátečník
Začátečník
Registrován: 27. črc 2005
Kontaktovat uživatele:

Příspěvek od Dynalon »

next_ghost: řešení ve kterém bych použil DB bych se raději vyhnul, server na kterém ta aplikace běží je hodně vytížený a ve špičce se občas stává že se nepodaří připojit k DB nebo se neprovedou dotazy apod.

Jasper: řešení se session jsem už zkoušel - skript zobrazující formulář a skript zpracovávající data z formuláře je totožný pokud tedy chci využít session musím po uložení hodnoty zavolat funkci session_write_close() která zapíše změny (během provádění skriptu je daná session v rámci skriptu soukromá proměnná) a na konci skriptu zavolám opět session_start() a proměnnou vymažu. Funguje to poměrně spolehlivě ale už se stalo že bylo online 150 uživatelů - nebude to příliš velká zátěž na server pokud se budou muset výše popsané operace provádět pro 150 uživatelů?
sovicka
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 17. pro 2003
Bydliště: východní prágl
Kontaktovat uživatele:

Příspěvek od sovicka »

Co to udělat naprosto jednoduše přes cookies? (ano, lehce problém s kompatibilitou, ale cookies jsou snad už dnes standardem pro mnoho formulářů)

Při zpracování se vytvoří cookie s časem, kdy naposledy odeslal formulář. Pokud se ho pokusí odeslat dříve, tak mu řekne kdy to bude možné.
Pokud cookie už existuje, tak if ... else zjistí zda je správný čas na to psát další formulář.

Velká výhoda: menší zátěž serveru a client-side úschova dat
Nevýhoda: smaže cookie a jsi namdlenej (ale pokud se o tom nemíníš tak by si ji nemusel všimnout)
Francie ... sladká Francie
Odpovědět

Zpět na „Programování a web“