Autor | Zpráva | ||
---|---|---|---|
davef6 Profil |
#1 · Zasláno: 21. 3. 2009, 13:14:34 · Upravil/a: davef6
něco mi brzdí web, vše jde v poho rychle, ale jsou chvíle kdy se začne prostě sekat. Může to způsobit toto?
if (isset($_SESSION["id"])) { $id = $_SESSION['id']; $id_uziv = $_SESSION['id']; // změna na online $time = time(); $time_a = $time - 600; if (!isset($_SESSION['time'])) { $_SESSION['time'] = $time; mysql_query("UPDATE uzivatele SET cas_online='$time', online='1' WHERE id='$id' limit 1"); } if ($_SESSION['time'] <= $time_a) mysql_query("UPDATE uzivatele SET cas_online='$time', online='1' WHERE id='$id' limit 1"); // konec změna na online } případně mám ukládání aktuálních dat do malé tabulky pro rychlejší výpis $time_a = time() - 900; $nahodnyq = mysql_query("SELECT time FROM `cache_time` where id='1' LIMIT 1"); $nahodnyf = mysql_fetch_row($nahodnyq); $nahodny = $nahodnyf[0]; if ($nahodny < $time_a and isset($_SESSION['id'])) { $ime = time(); mysql_query("update `cache_time` set time = '$ime' where id='1' LIMIT 1"); mysql_query("UPDATE uzivatele SET online='0' WHERE online = 1 and cas_online < $time_a"); $prikaz_mp3_tyden = mysql_query("Select ID, skladba, interpret, tyden from mp3 ORDER BY tyden DESC LIMIT 10"); $cislo_up = 1; while($zaz = mysql_fetch_assoc($prikaz_mp3_tyden) and $cislo_up < 11) { $id_mp3_temp = $zaz['ID']; $skladba_mp3_temp = $zaz['skladba']; $interpret_mp3_temp = $zaz['interpret']; $tyden_mp3_temp = $zaz['tyden']; mysql_query("update mp3_temp set id_mp3='$id_mp3_temp', interpret ='$interpret_mp3_temp', skladba = '$skladba_mp3_temp', tyden = '$tyden_mp3_temp' where id='$cislo_up'"); $cislo_up +=1; } $prikaz_mp3_stazeno = mysql_query("Select ID, skladba, interpret, stazeno from mp3 ORDER BY stazeno DESC LIMIT 10"); $cislo_up = 11; while($zaz = mysql_fetch_assoc($prikaz_mp3_stazeno) and $cislo_up < 21) { $id_mp3_temp = $zaz['ID']; $skladba_mp3_temp = $zaz['skladba']; $interpret_mp3_temp = $zaz['interpret']; $stazeno_mp3_temp = $zaz['stazeno']; mysql_query("update mp3_temp set id_mp3 = '$id_mp3_temp', interpret = '$interpret_mp3_temp', skladba = '$skladba_mp3_temp', stazeno = '$stazeno_mp3_temp' where id='$cislo_up'"); $cislo_up +=1; } $prikaz_mp3_novinky = mysql_query("Select ID, skladba, interpret, stazeno, cas from mp3 ORDER BY cas DESC LIMIT 10"); $cislo_up = 21; while($zaz = mysql_fetch_assoc($prikaz_mp3_novinky) and $cislo_up < 31) { $id_mp3_temp = $zaz['ID']; $skladba_mp3_temp = $zaz['skladba']; $interpret_mp3_temp = $zaz['interpret']; $cas_mp3_temp = $zaz['cas']; $stazeno_mp3_temp = $zaz['stazeno']; mysql_query("update mp3_temp set id_mp3 = '$id_mp3_temp', interpret = '$interpret_mp3_temp', skladba = '$skladba_mp3_temp', stazeno = '$stazeno_mp3_temp', cas = '$cas_mp3_temp' where id='$cislo_up'"); $cislo_up +=1; } $prikaz_mp3_hodnoceno = mysql_query("Select ID, skladba, interpret, stazeno, hodnot_pocet, hodnot_prumer from mp3 ORDER BY hodnot_prumer DESC, hodnot_pocet DESC LIMIT 10"); $cislo_up = 31; while($zaz = mysql_fetch_assoc($prikaz_mp3_hodnoceno) and $cislo_up < 41) { $id_mp3_temp = $zaz['ID']; $skladba_mp3_temp = $zaz['skladba']; $interpret_mp3_temp = $zaz['interpret']; $stazeno_mp3_temp = $zaz['stazeno']; $hodnot_pocet_mp3_temp = $zaz['hodnot_pocet']; $hodnot_prumer_mp3_temp = $zaz['hodnot_prumer']; mysql_query("update mp3_temp set id_mp3 = '$id_mp3_temp', interpret = '$interpret_mp3_temp', skladba = '$skladba_mp3_temp', hodnot_pocet = '$hodnot_pocet_mp3_temp', hodnot_prumer = '$hodnot_prumer_mp3_temp', stazeno = '$stazeno_mp3_temp', stazeno = '$stazeno_mp3_temp' where id='$cislo_up'"); $cislo_up +=1; } } jedno z toho by to mohlo dělat, co myslíte? |
||
Majkl578 Profil |
#2 · Zasláno: 21. 3. 2009, 14:28:54
urcite ten druhy script, je tam kupa mysql dotazu...
|
||
Mastodont Profil |
#3 · Zasláno: 21. 3. 2009, 14:35:45
davef6
V tom druhém skriptu mohou být i celé stovky updatů, zkoušel sis je vůbec někdy spočítat? |
||
davef6 Profil |
#4 · Zasláno: 21. 3. 2009, 16:53:54 · Upravil/a: davef6
no jde o to jestli by to šlo nějak udělat aby se to celé provedlo pouze jednou, mám tam sice podmínku na splnění času a první co se udělá je aktualizace času, ale nevěřim že se to celé provede pouze jednou...........to by mělo být asi 42 updatů, což by ještě bylo únosné, ale nevím jak na to...........cron mi na hostingu nefunguje, mám tam jen nějaký timer, takže ten také použít nemohu
|
||
orsen Profil * |
#5 · Zasláno: 21. 3. 2009, 19:44:11
davef6: v cronu se nevyznám, ale můžeš udělat něco jako:
<?php id(time() >= vemZDb('kdyDatDalsiCron')) { cron(); dejDoDb('kdyDatDalsiCron' => time() + $prodlevaCronu; } ?> |
||
imploder Profil |
#6 · Zasláno: 21. 3. 2009, 20:34:16
davef6
Tak můžeš zkusit remote cron. A ty dotazy radši vypisovat a počítat. orsen To by znamenalo, že víceméně náhodnému člověku to bude web brzdit. Šlo by to, ale muselo by se to pustit tak, aby to neblokovalo generování stránky. Tj. v jiném vlákně, ale nevím, jak to v PHP udělat jinak než exec()em. |
||
davef6 Profil |
#7 · Zasláno: 22. 3. 2009, 10:45:53
remote cron by určitě šel, ale pokud se nepletu tak musím mít pořád zapnuté pc, což nemohu
orsen díky, jen trošku nechápu kde vezmu tu prodlevu cronu |
||
DJ Miky Profil |
#8 · Zasláno: 22. 3. 2009, 12:42:25 · Upravil/a: DJ Miky
„Tj. v jiném vlákně, ale nevím, jak to v PHP udělat jinak než exec()em.“
Nějak takhle: <?php if(time()>=$kdyDalsiCron) { // nastavíme, aby uživatel nepřerušil provádění set_time_limit(0); ignore_user_abort(1); // nastavíme další provedení cronu nastavitDalsiCron($kdyDalsiCron + $prodlevaCronu); // přesměrujeme uživatele na tu samou stránku header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); header('Connection: Close'); flush(); // a teď provedeme, co potřebujeme, uživatele to zdržovat nebude //mysql_query()... } ?> Ale samozřejmě to má taky své mouchy, uživatel bude mít o jeden požadavek navíc a pokud poslal GET data, ztratí se mu... |
||
davef6 Profil |
#9 · Zasláno: 23. 3. 2009, 10:53:07
díky, vyzkouším to:) na této stránce se žádný get neprovádí, tak by to nemělo vadit
|
||
Časová prodleva: 15 let
|
0