( jc – 17.01.2011 16:07)

Anzahl der SQL queries pro Seitenaufruf mitloggen..

Gelegentlich kann es hilfreich sein die Anzahl der queries, die ein Seitenaufruf erzeugt, zu kennen.. sei es zur Kontrolle beim Entwickeln, oder weil man Probleme mit der Performance einer Seite hat. Der Aufwand dafür ist erstaunlich minimal und erfordert lediglich 2 Zeilen Code in der class.rex_sql.in.php, sowie eine in der index.php (je nachdem wo man mitschneiden will jene vom frontend und/oder auch backend).

Patch:

./redaxo/include/classes/class.rex_sql.inc.php:

// Original (Zeile 25 ff.):
  
var $errno// Fehlernummer 
  /*private*/ function rex_sql($DBID 1)
  {
    global 
$REX
    $this->debugsql false;
    
$this->selectDB($DBID); 

// Änderungen:
  
var $errno// Fehlernummer
  
static $count 0;                                          /* QUERIES COUNTER PATCH*/
  /*private*/ 
function rex_sql($DBID 1)
  {
    global 
$REX;
    
self::$count++;                                           /* QUERIES COUNTER PATCH*/
    
$this->debugsql false;
    
$this->selectDB($DBID); 

./index.php und/oder ./redaxo/index.php:

// ORIGINAL (Zeile 66 ff.):
// ----- caching end für output filter
$CONTENT ob_get_contents();
ob_end_clean(); 

// PATCH:
}
var_dump(rex_sql::$count);                           /* QUERIES COUNTER PATCH*/
// ----- caching end für output filter
$CONTENT ob_get_contents();
ob_end_clean(); 

Kontrolliertere Ausgabe:

Will man die Zahl nicht einfach zusammenhangslos am Anfang des Seiten-HTML ausgehustet bekommen, kann man die Ausgabe per Ersetzung natürlich auch gezielt an geeigneter Stelle (z.b. im Footer) unterbringen, und z.b. auch – wie in folgendem Beispiel – nur wenn man als Admin eingeloggt ist:

 // Ersetzung von Platzhalter ###SQL_QUERIES### im Output durch den Zähler..
// ----- caching end für output filter
$CONTENT ob_get_contents();
if (isset(
$REX['INSTNAME']) && isset($_SESSION[$REX['INSTNAME']]['UID']) && ($_SESSION[$REX['INSTNAME']]['UID']) == 1)
{
  
$CONTENT str_replace('###SQL_QUERIES###',var_export(rex_sql::$count,true),$CONTENT);
}
ob_end_clean(); 

ps.: thx @ robert für Beihilfe & Geduld.. ;->