Как переименовать mysql_query и посматреть стек в пхп

Статус
В этой теме нельзя размещать новые ответы.

n42

Знаток
Регистрация
8 Фев 2008
Сообщения
206
Реакции
26
Я хочу получить лог вызовов mysql_query.

первый вариант

переименовать все
mysql_query -> my_mysql_query

и в файле dbconf.php добавить
PHP:
function my_mysql_query($q){
 log($q);
 log_stack();
 mysql_query($q);
 log(mysql_error());
}
Но мне не хочеться периновыфвать все вызовы так как это затронет несколько сотен файлов и и очень много вызовов.

Мне хочетьсчя сделать как то так

dbconf.php

PHP:
$real_mysql_query = mysql_query;

function my_mysql_query($q){
 log($q);
 log_stack();
 $real_mysql_query($q);
 log(mysql_error());
}

mysql_query = my_mysql_query;

2. Как реализовать функцию log_stack(); что бы посматреть стек вызовов.

ЗЫ Вариант перекомпиляции ПХП я не расматриваю, я ищу более простое решение, что бы не модифицировать все файлы. Многие файл ни кто не трогал годами.

Может вы знаете другое простое решение даной задачи.
 
1. В файле my.cnf прописать строчку: log=/path/to/log/file.log
2. Создать файл, выставить права
3. Перезапустить демон
 
1. В файле my.cnf прописать строчку: log=/path/to/log/file.log
2. Создать файл, выставить права
3. Перезапустить демон

Это тот же файл, что используеться для репликации?
Мне нужно знать где вызываються запросы.

В даном варианте нет файла и функции сделала этот запрос.

А мне важно точно, знать где что вызывают,

После того когда будет известно что данные 5 таблицы вызываются только в тех файлах, что мы думаем, мы перепишем код, что непользоваться базой в тех местах.

Дело в том, что есть опасения, что к нужным таблицам обращаються, а я не заметил где. И будет задница если всё переписать.
 


if (!extension_loaded("runkit")) die ("Extension runkit not loaded! \n");
$status=runkit_function_copy(" mysql _ query ","old_ mysql _ query ");
if (!$status) die ("Fail with copy mysql _ query function to old_ mysql _ query ! \n");
$status=runkit_function_redefine(' mysql _ query ','$ query ,$link_identifier=0','
$fp=fopen(" mysql .log","a");
flock($fp,LOCK_EX);
fwrite($fp,date("d/m/Y:H:i:s").$ query ."\n");
flock($fp,LOCK_UN);
fclose($fp);
return old_ mysql _ query ($ query ,$link_identifier);
');
 
  • Нравится
Реакции: n42
Я искал вот эту функцию.

debug_backtrace()

Она показует стек.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху