mysql_stat2
Auteur: Thomas - 27 januari 2005 - 13:51 - Gekeurd door: Thomas - Hits: 3693 - Aantal punten: 3.75 (8 stemmen)
De PHP functie mysql_stat() retourneert een string met mysql-statistieken, maar omdat je hier verder niet zoveel mee kunt doen, heb ik een functie gemaakt die met behulp van deze string een (associatief) array retourneert, of een enkele waarde uit dit array.
Wanneer je mysql_stat() afdrukt (nadat je een connectie met je MySQL-database hebt gemaakt), zie je ongeveer het volgende:
"Uptime: 2845436 Threads: 1 Questions: 996 Slow queries: 0 Opens: 56 Flush tables: 1 Open tables: 1 Queries per second avg: 0.000"
Dus statistieken zijn van de vorm <statistiek_naam>:<spatie><statistiek_waarde><spatie><spatie> en zo voor alle statistieken.
Ik gebruik een reguliere expressie om namen en waarden te scheiden en deze in een array te zetten.
Wat je bijvoorbeeld met mysql_stat(2) zou kunnen doen, is het aantal uitgevoerde queries bij het laden van een pagina bepalen. Dit doe je als volgt:
Je zet aan het begin van je pagina:
$start = mysql_stat2(2);
Dit is de 3e (!) index van het array, en deze bevat het tot dan toe uitgevoerde aantal queries.
Aan het einde van je pagina zet je:
$einde = mysql_stat2(2) - $start;
$einde bevat nu het aantal queries dat tijdens de uitvoer van het script is uitgevoerd.
Voor een lijst van namen en waarden gebruik je
print_r(mysql_stat2(-1, true));
Dit levert:
Array
(
[uptime] => 2846049
[threads] => 1
[questions] => 1014
[slow_queries] => 0
[opens] => 56
[flush_tables] => 1
[open_tables] => 1
[queries_per_second_avg] => 0.000
)
Voor een lijst van indices en waarde gebruik je
print_r(mysql_stat2());
Dit levert:
Array
(
[0] => 2846216
[1] => 1
[2] => 1016
[3] => 0
[4] => 56
[5] => 1
[6] => 1
[7] => 0.000
)
|
Code: |
<?php
//! retourneert een enkele mysql-stat of een (mogelijk associatief) array met alle mysql-stats
/*!
@param $index (int) specifieke waarde die je wilt weten van mysql_stat(), -1 zijn alle waarden (default -1)
@param $assoc (bool) geeft aan of er een associatief array geretourneerd moet worden (default false)
@return (mixed) waarde van index $index in het stats-array (als index > -1) of alle waarden in een array ($assoc geeft aan of het een associatief array betreft)
mysql_stat() werkt vanaf PHP 4.3.0
$assoc is alleen van betekenis als $index -1 is, onzinnig om hier true van te maken als $index > -1
*/
function mysql_stat2($index=-1, $assoc=false) {
// the last stat in mysql_stat() does not have two spaces in front of it ?
$ret = array();
// een of meer woorden, gevolgd door een (decimaal) getal
$pattern = "/(\w+( \w+)*): (\d+(\.\d+)?)/ie";
if($assoc) {
$replace = "\$ret[str_replace(\" \", \"_\", strtolower('\\1'))] = '\\3'"; // named (associative) indices
} else {
$replace = "\$ret[] = '\\3'"; // numeric indices
}
preg_replace($pattern, $replace, mysql_stat());
if($index > -1) {
return $ret[$index];
} else {
return $ret;
}
}
?>
<?php //! retourneert een enkele mysql-stat of een (mogelijk associatief) array met alle mysql-stats /*! @param $index (int) specifieke waarde die je wilt weten van mysql_stat(), -1 zijn alle waarden (default -1) @param $assoc (bool) geeft aan of er een associatief array geretourneerd moet worden (default false) @return (mixed) waarde van index $index in het stats-array (als index > -1) of alle waarden in een array ($assoc geeft aan of het een associatief array betreft) mysql_stat() werkt vanaf PHP 4.3.0 $assoc is alleen van betekenis als $index -1 is, onzinnig om hier true van te maken als $index > -1 */ function mysql_stat2($index=-1, $assoc=false) { // the last stat in mysql_stat() does not have two spaces in front of it ? // een of meer woorden, gevolgd door een (decimaal) getal $pattern = "/(\w+( \w+)*): (\d+(\.\d+)?)/ie"; if($assoc) { $replace = "\$ret[str_replace(\" \", \"_\", strtolower('\\1'))] = '\\3'"; // named (associative) indices } else { $replace = "\$ret[] = '\\3'"; // numeric indices } if($index > -1) { return $ret[$index]; } else { return $ret; } } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|