Autor Zpráva
Ghosting
Profil
Zdravím,
dalo by se pomocí php (vím že to jde zjistit přímo v mysql phpMyAdmin) zjistit počet dotazů do mysql db na dané stránce?
Ghosting
Profil
Sakra, vedle, prosím přesuňte to. Díky.
ninja
Profil
Toto vetsinou poskytuje DB layer. Nejjednodusi reseni je u kazdeho volani mysql_query spustit i $pocet_dotazu++;
Michal666
Hosting web4ce.cz
Profil
ninja
Jojo a nejlepe pres nejakou globalni promenou, pro jistotu, kdyby se vytvarelo vice instaci tridy.
Ghosting
Profil
To bude problem, ponevadz pouzivam CMS, myslel jsem ze to jde mi nejak mimo.
jirifogl
Hosting flyweb.cz
Profil
To by nemusel být problém, pokud je CMS napsaný aspoň maliličko rozumně, půjde to i na úrovni PHP, i když to chce zásah do jeho kódu.

Za předpokladu, že s databází se pracuje přes objekty, ne procedurálním stylem, stačí vytvořit třídu zhruba tímhle stylem:

class MyDBWatcher extends mysqli {

  public $querycount = 0;

  public function query($sql) {
    $this->querycount++;
    parent::query($sql);
  }
}


Potom je jen potřeba v kódu CMS vyhledat všechny
new mysqli
konstrukce a nahradit je
new MyDBWatcher
. CMS bude stále běhat přes mysqli třídu, ale kdykoli se zavolá její metoda query, provede se nejdřív navýšení čítače. Ten samozřejmě můžete mít, kde chcete - je libo statická vlastnost nebo globální proměnná?

Na konci stránky si pak stačí přečíst proměnnou $querycount.

S procedurálním stylem by to šlo taky, ale za cenu mnohem větších zásáhů do kódu, to už by se vylatilo spíš posunout to sledování o úroveň níž a odchytávat přímo síťový provoz mezi webserverem a SQL serverem.
Michal666
Hosting web4ce.cz
Profil
Ghosting
O jaky CMS se jedna? Pouziva nejakou db knihovnu? Pokud ano je mozne ze toto jiz ma v sobe a staci napriklad zapnout debug mode.
Ghosting
Profil
jirifogl
Ahoj,
díky za post, bohužel PHP moc nerozumím, každopádně zasahovat do CMS se mi moc nechce, podle toho co popisujete bych musel upravit asi mnoho souborů.

Michal666
Jde o www.sunlight-cms.net , debud mod (asi) neobsahuje.

Myslel jsem ze by to slo vytahnout z nejakeho infa od mysql DB, nezavazne na CMS a pod.

mmm - prosím o přesunutí do sekce "PHP"
jirifogl
Hosting flyweb.cz
Profil
Ghosting
zasahovat do CMS se mi moc nechce

pak jsem asi špatně rozuměl tomu, že to chcete provést na úrovni PHP
Michal666
Hosting web4ce.cz
Profil
Ghosting
Zjistit to na mysql serveru samozrejme jde, ale to byste na tom mysql serveru musel byt sam, protoze pocty dotazu se pocitaji od vsech uzivatelu dohromady.
Aesir
Profil
Ghosting:
každopádně zasahovat do CMS se mi moc nechce
V případě tohodle "CMS" to asi aní není moc nadějné, nakoukl jsem do zdrojáků a postrádám tam nějaký návrh aplikace, vizte např.:

if($process){
  echo '<h2>'.$_lang['global.result'].'</h2><br />';
  $query=@mysql_query($sql);


Takže žádná oddělená db vrstva, v tomhle případě to asi možné nebude (via php).
jirifogl
Hosting flyweb.cz
Profil
Uff, jestli je to taková prasečina, jak píše Aesir, tak potěš koště. Sám tenhle CMS neznám, ale pokud máte k dispozici nějaký unixový systém (Linux, BSD, Solaris, mělo by to být všude stejné), můžete zkusit ještě toto:

V každém adresáři, který obsahuje nějaké PHP soubory tohoto CMS, spusťte tenhle příkaz:

sed -i 's/mysql_query/mymysql_query/g' *.php


Pak na začátek index.php přidejte tenhle kód:

$SQLQUERYCOUNT = 0;

function mymysql_query($sql) {
  $SQLQUERYCOUNT++;
  return mysql_query($sql);
}


A někde na konci si udělejte výstup proměnné $SQLQUERYCOUNT.

Ten unixový příkaz sed dělá jen tolik, že najde všechny výskyty volání fce mysql_query ve všech *.php souborech a nahradí je voláním mymysql_query(), což je opět mezivrstva, která navýší čítač a předává věci běžnému mysql_query.

Tzn. že nemusíte shánět žádný unix, pokud máte editor, který zvládne hledat a nahrazovat ve více souborech současně, případně pokud ten Váš CMS má dostatečně málo PHP souborů, aby se Vám chtělo každý otevřít a hledání/nahrazení tam provést ručně

Než byste ale tohle celé provedl, připravte se na to, že to už je opravdu velký zásah do kódu. Takže to klidně někde může přestat fungovat a Vy budete muset kód prozkoumat a zjistit, proč prosté nahrazení nefunguje. A samozřejmě - až se toho budete chtít zase zbavit, tak nejjednodušší bude obnova ze zálohy nebo čistá instalace.