Autor Zpráva
gogy27
Profil
Zdravím,
nemám s týmto problémom veľké skúsenosti, preto by som sa chcel opýtať o malú radu.
Mám vytvorený formulár, do ktorého si zákazník nahodí text v spin formáte, vygeneruje sa nejaký normálny článok, pridelí sa mu nadpis, ktoré sa vypisujú do ďalšej textarea po riadkoch (1 riadok - 1 nadpis) a toto všetko sa zapíše do databázy. Primitívna úloha, všetko funguje správne.

Problém však je, ak užívateľ si dá článok, ktorý ma napríklad 100 000 znakov. Pri jednom nadpise to ide v pohode, do pár milisekund to prebehne. Avšak keď užívateľ tam dá niekoľko tisíc nadpisov (napríklad 50 000). Samozrejme, že to pracuje, pracuje a pracuje ale po chvílke sa obajví (v google chrome) správa, že ERR_EMPTY_RESPONSE, teda server prerušil vykonávanie tohto skriptu.

Vedel by niekto poradiť, ako donútiť server aby čakal kým sa naozaj ukončí celý tento skript, aj keby to trvalo niekoľko hodín?

Ďakujem
Tori
Profil
set_time_limit, možná i ignore_user_abort
gogy27
Profil
Tori:
Môžem bezpečne použiť: set_time_limit(0)? Na konci, keď už nebude nič treba vykonávať, tak sa sám vypne?
Alphard
Profil
Ano, při validním doběhnutí scriptu se proces ukončí. Ale ztrácíte pojistku pro případ zacyklení, záměrného pokusu přetížit server a pod. Takže může být lepší jen zvýšit limit, třeba na velmi nadsazený, ale pořád aktivní.
gogy27
Profil
Ďakujem veľmi pekne.

Ešte jedna otázka. Môže to mať aj nejak server chránené, že si povie: fajn, nastav si cez php, že chceš aby sa ti to vykonávalo stále, ale ja (server) ti to aj tak vypnem zhruba po hodine?

Pretože keď som tam dal 90 000 nadpisov tak skončilo mi to na 53 000 a teraz neviem či niekde nastala chyba v PHP alebo na serveri, že on sám to vypol. Alebo niekto fyzicky (správca serverovne) mi to vypol.
aDAm
Profil
hostuješ sám? Nebo u někoho. Set_time_limit není běžne povolená věc a snad žáden běžný hoster ti to na sdíleném hostingu nepovolí. Pokud ale máš možnost si to ovlivňovat tak server ti to stopne až po uplynutí toho timelimitu a nebo v případě chyby. Pokud došlo k chybě tak od čeho je error log? Stačí se do něho podívat a hned víš kde došlo k problému.
Joker
Profil
gogy27:
Jak už naznačuje aDAm, na běžném sdíleném hostingu obvykle „si prostě zvýšit limit“ nejde a už vůbec ne si dát neomezený.
Možná by se hosting dal přesvědčit, aby časový limit o něco zvýšil.
Pokud to nejde anebo nestačí, je to docela problém, řešení je buď si pořídit celý server, nebo skript předělat tak, aby se do limitu vešel.
Tori
Profil
gogy27:
Ještě by šlo zpracovávat to dávkově, třeba po 10000 nadpisů, pak přesměrovat na tentýž skript s parametrem skript.php?start=20000. (záleží ale na formátu vstupních dat, jestli se dají nějak rozumně rozdělovat).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: