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); 
    } 
} 
?>