Quote:
trabis wrote:
All xoops_version.php are read so..
Well, this is not true sorry.
Maybe you should start by taking a look to your queries.
I have a little hack (which is very ugly) to show queries time in my site. Please take a look at the comments and make your changes.
You can use this is class/database/mysqldatabase.php
// $Id: mysqldatabase.php 1395 2008-03-27 10:49:44Z phppp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// Author: Kazumi Ono (AKA onokazu) //
// URL: http://www.myweb.ne.jp/, https://xoops.org/, http://www.xoopscube.jp/ //
// Project: The XOOPS Project //
// ------------------------------------------------------------------------- //
if (!defined("XOOPS_ROOT_PATH")) {
die("XOOPS root path not defined");
}
/**
* @package kernel
* @subpackage database
*
* @author Kazumi Ono
* @copyright copyright (c) 2000-2003 XOOPS.org
*/
/**
* base class
*/
include_once XOOPS_ROOT_PATH."/class/database/database.php";
/**
* connection to a MySQL database
*
* @abstract
*
* @author Kazumi Ono
* @copyright copyright (c) 2000-2003 XOOPS.org
*
* @package kernel
* @subpackage database
*/
class XoopsMySQLDatabase extends XoopsDatabase
{
/**
* Database connection
* @var resource
*/
var $conn;
/**
* connect to the database
*
* @param bool $selectdb select the database now?
* @return bool successful?
*/
function connect($selectdb = true)
{
static $db_charset_set;
$this->allowWebChanges = ( $_SERVER['REQUEST_METHOD'] != 'GET' );
if ( !extension_loaded( 'mysql' ) ) {
trigger_error( 'notrace:mysql extension not loaded', E_USER_ERROR );
return false;
}
if (XOOPS_DB_PCONNECT == 1) {
$this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
} else {
$this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
}
if (!$this->conn) {
$this->logger->addQuery('', $this->error(), $this->errno());
return false;
}
if ($selectdb != false) {
if (!mysql_select_db(XOOPS_DB_NAME)) {
$this->logger->addQuery('', $this->error(), $this->errno());
return false;
}
}
if (!isset($db_charset_set) && defined('XOOPS_DB_CHARSET') && XOOPS_DB_CHARSET) {
$this->queryF( "SET NAMES '" . XOOPS_DB_CHARSET . "'" );
}
$db_charset_set = 1;
return true;
}
/**
* generate an ID for a new row
*
* This is for compatibility only. Will always return 0, because MySQL supports
* autoincrement for primary keys.
*
* @param string $sequence name of the sequence from which to get the next ID
* @return int always 0, because MySQL has support for autoincrement
*/
function genId($sequence)
{
return 0; // will use auto_increment
}
/**
* Get a result row as an enumerated array
*
* @param resource $result
* @return array
*/
function fetchRow($result)
{
return @mysql_fetch_row($result);
}
/**
* Fetch a result row as an associative array
*
* @return array
*/
function fetchArray($result)
{
return @mysql_fetch_assoc( $result );
}
/**
* Fetch a result row as an associative array
*
* @return array
*/
function fetchBoth($result)
{
return @mysql_fetch_array( $result, MYSQL_BOTH );
}
/**
* Get the ID generated from the previous INSERT operation
*
* @return int
*/
function getInsertId()
{
return mysql_insert_id($this->conn);
}
/**
* Get number of rows in result
*
* @param resource query result
* @return int
*/
function getRowsNum($result)
{
return @mysql_num_rows($result);
}
/**
* Get number of affected rows
*
* @return int
*/
function getAffectedRows()
{
return mysql_affected_rows($this->conn);
}
/**
* Close MySQL connection
*
*/
function close()
{
mysql_close($this->conn);
}
/**
* will free all memory associated with the result identifier result.
*
* @param resource query result
* @return bool TRUE on success or FALSE on failure.
*/
function freeRecordSet($result)
{
return mysql_free_result($result);
}
/**
* Returns the text of the error message from previous MySQL operation
*
* @return bool Returns the error text from the last MySQL function, or '' (the empty string) if no error occurred.
*/
function error()
{
return @mysql_error();
}
/**
* Returns the numerical value of the error message from previous MySQL operation
*
* @return int Returns the error number from the last MySQL function, or 0 (zero) if no error occurred.
*/
function errno()
{
return @mysql_errno();
}
/**
* Returns escaped string text with single quotes around it to be safely stored in database
*
* @param string $str unescaped string text
* @return string escaped string text with single quotes around
*/
function quoteString($str)
{
return $this->quote($str);
$str = "'".str_replace('\"', '"', addslashes($str))."'";
return $str;
}
/**
* Quotes a string for use in a query.
*
*/
function quote( $string )
{
return "'" . mysql_real_escape_string( $string, $this->conn ) . "'";
}
/**
* perform a query on the database
*
* @param string $sql a valid MySQL query
* @param int $limit number of records to return
* @param int $start offset of first record to return
* @return resource query result or FALSE if successful
* or TRUE if successful and no result
*/
function queryF($sql, $limit=0, $start=0)
{
if ( !empty($limit) ) {
if (empty($start)) {
$start = 0;
}
$sql = $sql. ' LIMIT '.(int)$start.', '.(int)$limit;
}
/***********TRABIS HACK****************/
$time = 0;
global $xoopsUser;
//change '1' to your user id so this timer only shows to you
if (is_object($xoopsUser) && $xoopsUser->getVar('uid')==1){
$start = microtime();
}
$result = mysql_query($sql, $this->conn);
//change '1' to your user id so this timer only shows to you
if (is_object($xoopsUser) && $xoopsUser->getVar('uid')==1){
$end = microtime() + 1;
$time = $end - $start ;
// .0003 is just my reference (forget the leading 1. in the logs, has I said this is an ugly hack) if query takes longer than this it will be prefix with ### so you can better track it in log
if ($time > 1.0003) $time = "########".$time."##########";
}
if ( $result ) {
$this->logger->addQuery($time.' - '.$sql);
//$this->logger->addQuery($sql);
return $result;
/***********END OF TRABIS HACK****************/
} else {
$this->logger->addQuery($sql, $this->error(), $this->errno());
return false;
}
}
/**
* perform a query
*
* This method is empty and does nothing! It should therefore only be
* used if nothing is exactly what you want done! ;-)
*
* @param string $sql a valid MySQL query
* @param int $limit number of records to return
* @param int $start offset of first record to return
*
* @abstract
*/
function query($sql, $limit=0, $start=0)
{
}
/**
* perform queries from SQL dump file in a batch
*
* @param string $file file path to an SQL dump file
*
* @return bool FALSE if failed reading SQL file or TRUE if the file has been read and queries executed
*/
function queryFromFile($file){
if (false !== ($fp = fopen($file, 'r'))) {
include_once XOOPS_ROOT_PATH.'/class/database/sqlutility.php';
$sql_queries = trim(fread($fp, filesize($file)));
SqlUtility::splitMySqlFile($pieces, $sql_queries);
foreach ($pieces as $query) {
// [0] contains the prefixed query
// [4] contains unprefixed table name
$prefixed_query = SqlUtility::prefixQuery(trim($query), $this->prefix());
if ($prefixed_query != false) {
$this->query($prefixed_query[0]);
}
}
return true;
}
return false;
}
/**
* Get field name
*
* @param resource $result query result
* @param int numerical field index
* @return string
*/
function getFieldName($result, $offset)
{
return mysql_field_name($result, $offset);
}
/**
* Get field type
*
* @param resource $result query result
* @param int $offset numerical field index
* @return string
*/
function getFieldType($result, $offset)
{
return mysql_field_type($result, $offset);
}
/**
* Get number of fields in result
*
* @param resource $result query result
* @return int
*/
function getFieldsNum($result)
{
return mysql_num_fields($result);
}
}
/**
* Safe Connection to a MySQL database.
*
*
* @author Kazumi Ono
* @copyright copyright (c) 2000-2003 XOOPS.org
*
* @package kernel
* @subpackage database
*/
class XoopsMySQLDatabaseSafe extends XoopsMySQLDatabase
{
/**
* perform a query on the database
*
* @param string $sql a valid MySQL query
* @param int $limit number of records to return
* @param int $start offset of first record to return
* @return resource query result or FALSE if successful
* or TRUE if successful and no result
*/
function query($sql, $limit=0, $start=0)
{
return $this->queryF($sql, $limit, $start);
}
}
/**
* Read-Only connection to a MySQL database.
*
* This class allows only SELECT queries to be performed through its
* {@link query()} method for security reasons.
*
*
* @author Kazumi Ono
* @copyright copyright (c) 2000-2003 XOOPS.org
*
* @package kernel
* @subpackage database
*/
class XoopsMySQLDatabaseProxy extends XoopsMySQLDatabase
{
/**
* perform a query on the database
*
* this method allows only SELECT queries for safety.
*
* @param string $sql a valid MySQL query
* @param int $limit number of records to return
* @param int $start offset of first record to return
* @return resource query result or FALSE if unsuccessful
*/
function query($sql, $limit=0, $start=0)
{
$sql = ltrim($sql);
if ( !$this->allowWebChanges && strtolower( substr($sql, 0, 6) ) != 'select' ) {
trigger_error( 'Database updates are not allowed during processing of a GET request', E_USER_WARNING );
return false;
}
return $this->queryF($sql, $limit, $start);
}
}
?>