Autor Zpráva
davef6
Profil
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
urcite ten druhy script, je tam kupa mysql dotazu...
Mastodont
Profil
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
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 *
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
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
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
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
díky, vyzkouším to:) na této stránce se žádný get neprovádí, tak by to nemělo vadit

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: