/includes/wp-db.php
function query( $query ) { if ( ! $this->ready ) return false; // some queries are made before the plugins have been loaded, and thus cannot be filtered with this method $query = apply_filters( 'query', $query ); $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) $this->timer_start(); $this->result = @mysql_query( $query, $this->dbh ); $this->num_queries++; if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) $this->queries[] = array( $query, $this->timer_stop(), $this->get_caller() ); // If there is an error then take note of it.. if ( $this->last_error = mysql_error( $this->dbh ) ) { $this->print_error(); return false; } if ( preg_match( '/^\s*(create|alter|truncate|drop) /i', $query ) ) { $return_val = $this->result; } elseif ( preg_match( '/^\s*(insert|delete|update|replace) /i', $query ) ) { $this->rows_affected = mysql_affected_rows( $this->dbh ); // Take note of the insert_id if ( preg_match( '/^\s*(insert|replace) /i', $query ) ) { $this->insert_id = mysql_insert_id($this->dbh); } // Return number of rows affected $return_val = $this->rows_affected; } else { $i = 0; while ( $i < @mysql_num_fields( $this->result ) ) { $this->col_info[$i] = @mysql_fetch_field( $this->result ); $i++; } $num_rows = 0; while ( $row = @mysql_fetch_object( $this->result ) ) { $this->last_result[$num_rows] = $row; $num_rows++; } @mysql_free_result( $this->result ); // Log number of rows the query returned // and return number of rows selected $this->num_rows = $num_rows; $return_val = $num_rows; } return $return_val;}
Нас интересует строка
$this->result = @mysql_query( $query, $this->dbh );
Перед ней пишем
$time = microtime(1);
после нее
$this->times[] = (microtime(1)-$time);
В итоге получаем
$time = microtime(1);$this->result = @mysql_query( $query, $this->dbh );self::queriesTime[$this->num_queries]['time'] = (microtime(1)-$time);self::queriesTime[$this->num_queries]['query'] =$query;$this->num_queries++;//строка долна идти после получения времени
В начале класса объявляем свойство queriesTime, которое является массивом.
private static $queriesTime = array();
То есть это на выходе получиться массив, где в каждой ячейки будет лежать еще 2 ячейки со временем запроса, и с самим запросом.
Теперь создадим метод, который будет все это дело логировать.
public static function myCustomLoger(){ $output = ''; foreach(self::queriesTime as $k=>$v) { $time = $v['time']; $query = $v['query']; //Я запишу все это дело в файл $output .= "$time<qtdelimiter>$query<linesdelimiter>"; } $fileName = $_SERVER['DOCUMENT_ROOT'] .'/mylogs/' .date('Y-m-d', time()) .'.log';//название файла - текущая дата формата ГГГГ-ММ-ДД, то есть для каждых суток создается отдельный файл. file_put_contents($fileName, $output, FILE_APPEND);}
Ну и финал. В конце файла index.php(можно еще к админке прикрутить) вызываем наш метод myCustomLoger.
$wpdb->myCustomLoger();
Я писал в файл, так как это дело быстрей записи в БД. При желании можно сделать скрипт, который по крону в начале новых суток обработает файл с логами за прошедшие сутки и запишет данные в БД. Ну а дальше уже можно написать интерфейс для работы с логами из БД.
Помимо время запроса и текста запроса можно добавить тип запроса(селект, инсерт, делит, апдейт), количество символов в запросе, страницу, где выполняется запрос и т.д. Вообщем все что захотите.
Если интересуют только медленные запросы, то надо так:
$time = microtime(1);$this->result = @mysql_query( $query, $this->dbh );$time = (microtime(1)-$time);if ($time > 0.5){ self::queriesTime[$this->num_queries]['time'] = $time; self::queriesTime[$this->num_queries]['query'] = $query;}$this->num_queries++;//строка долна идти после получения времени
0.5 - время в секундах, то есть если наш запрос выполнялся дольше 500 милисекунд, то мы его записываем
ЗЫ. многа букав получилось, уж извиняйте:)
Все делаем в ПХПМайАдмине:
Для начала
SELECT COUNT(`user_id`) FROM `dle_users` WHERE `lastdate`=`reg_date`
Смотрим сколько юзеров ниразу не входили в свой аккаунт.
Если их много, то следующий шаг
DELETE FROM `dle_users` WHERE `lastdate`=`reg_date`
удаление юзеров, этих самых юзеров
int mysql_insert_id ([ resource $link_identifier ] )
mysql_insert_id() возвращает ID, сгенерированный колонкой с AUTO_INCREMENT последним запросом INSERT к серверу, на который ссылается переданный функции указатель link_identifier . Если параметр link_identifier не указан, используется последнее открытое соединение.
Это взято из мануала.
Хотел обратиться к ТСу, но что-то напрягает ситуация с Mark-M.
ТС, как прокомментируете эту ситуацию?
$i=0;
foreach ($xml->folder->file as $item) {
if ($i > $maxLineOnPage) break;
echo "<tr>";
echo "<td>", $item->link, "</td>";
echo "<td>", $item->size, "</td>";
echo "</tr>";
$i++;
}
Также интересует этот вопрос. Есть двиг(самопис, интерфейс дружелюбный). Необходимо постить Вами же сделанный рерайт + найти картинку(-и). Исходники надо тоже искать самостоятельно. Сколько $/тыщезнак возьмете за такое дело? Ответ если можно в личку, буду очень признателен.
Зачем для этого использовать аякс? Если все можно сделать на JavaScript или Jquery.
Если бы ВП не был столь популярен, то и вправду бы подумал, что готовых решений нет, а тут...
Так Вам не аякс нужен а JavaSript либо просто обернуть меню так:
<noindex><div class="menu">your menu</div></noindex> - вариант для яндекса.
И где у Вас там меню? Это то что сверху 2 ссылки?
http://bloginblog.ru/plaginy/wordpress-plugin-jquery-plavayushhee-menyu.html
http://beloweb.ru/wp/jquery-plagin-vertikalnogo-akkordeon-menyu.html
http://wp-kama.ru/id_800/menyu-na-jquery.html - не тока для ВП. Если сможете - используйте.
Вам проще самому искать меню в ПС и смотреть, что нравиться, а что нет.
ЗЫ. использование аякса тут не оправдано. ИМХО. Хотя, кто как хочет, так и...... делает:)
Так, ок, пойдем от обратного. Зачем Вам меню вешать на АЯКС? Какие цели преследуете. Расскажите по буквам, как первокласснику.
Вот Ваш AJAX, почитайте.
Если кратко и на пальцах:
Есть файл1, информация в котором должна динамически меняться в зависимости от условий. Есть файл2 на сервере, который разруливает все это дело.
Пример.
На странице у Вас 2 селекта - город и район.
Вам нужно чтобы в зависимости от выбранного города менялось значение район. Так как тащить с сервера весь массив с городами и районами полный бред, то мы используем технологию AJAX.
Ну то есть для Москвы показывается бутово, новокасино, а для бобруйска отшиб, гетто и т.д.
На событие onChange селекта с городом мы вешаем тот самый аякс, и когда юзер меняет город, этот запрос посылается АЯКСом на сервер(передается город). Файл, к которому идет обращение смотрит хранилище(БД, файлы, не суть) и выбирает районы которые принадлежат этому городу, и возвращает их нашей странице. Страница уже во втором селекте показывает те районы, которые она получила с сервера от файла2.