Милованов Ю.С

Милованов Ю.С
Рейтинг
196
Регистрация
24.01.2008
Должность
PROgrammer
Интересы
Автомобили, рыбалка, охота

/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++;

}

opanas1:
fisherman1, здравствуйте! скажите, а возможно ли сотрудничество - вы пишите статьи и вы их же и размещаете на сайте? готов предложить сотрудничество....

Также интересует этот вопрос. Есть двиг(самопис, интерфейс дружелюбный). Необходимо постить Вами же сделанный рерайт + найти картинку(-и). Исходники надо тоже искать самостоятельно. Сколько $/тыщезнак возьмете за такое дело? Ответ если можно в личку, буду очень признателен.

DiAksID:
хотелка у ТС абсолютно верная и самими ПыСы рекомендуемая - отдавать ботам только уник-контент безо всяких сквозняков. тогда и всяко разные sitemap превращаются из довеска в абсолютно необходимый инструмент...

Зачем для этого использовать аякс? Если все можно сделать на 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.

Всего: 1956