отловить вызов определенной функции PHP

Xakez
На сайте с 20.12.2008
Offline
163
1061

Здравствуйте.

Реально ли отловить вызов PHP функции?

То есть, у меня есть несколько файлов которые обращаются к БД MySQL.

Мне нужно отловить все изменения БД. А еще лучше все запросы к ней.

Я предполагаю, что если можно отловить вызов mysql_query() - тогда я бы мог и получить запрос, который выполняется.

Переопределять функции в PHP нельзя.

Может быть у кого-нибудь есть исходник модуля PHP с функциями? тогда можно было бы доработать функцию mysql_query - и это был бы самый лучший вариант.

Кто-нибудь может быть знает еще варианты, как отловить все изменения вы БД?

Ох какие прокси у нас тут ( https://toolip.io?ref=guruprofile )
T
На сайте с 20.03.2007
Offline
67
Toy
#1

Возможность обернуть функцию в функцию-оболочку отсутствует?

S
На сайте с 23.05.2004
Offline
315
#2

1. включите лог всех запросов в базе, увидите полную картину.

2. http://php.net/manual/en/function.override-function.php - но придется установить дополнительный модуль для пхп.

Это просто подпись.
C
На сайте с 28.01.2010
Offline
70
#3
Xakez:

Переопределять функции в PHP нельзя.

http://www.php.net/manual/en/function.runkit-function-redefine.php

Это - личная подпись. Здесь обычно ставят ссылки на всякие кривые сайты, надеясь получить "жирный бек".
Xakez
На сайте с 20.12.2008
Offline
163
#4

Stek, я правильно Вас понял:

<?php

override_function('mysql_query', '$query', 'echo $query;');

?>

но мне все таки нужно выполнить запрос к БД. А кода функции mysql_query у меня нет(

Так думаю не прокатит:

<?php

override_function('mysql_query', '$query', 'echo $query; return mysql_query($query)');

?>

T
На сайте с 20.03.2007
Offline
67
Toy
#5
Так думаю не прокатит:
<?php
override_function('mysql_query', '$query', 'echo $query; return mysql_query($query)');
?>

В теории должно прокатить, так как на момент вызова mysql_query в третьем параметре она еще не была переопределена.

Xakez
На сайте с 20.12.2008
Offline
163
#6

Toy, а на счет обертки функции Вы это и имели ввиду?

Xakez добавил 10.06.2011 в 12:53

Stek:
1. включите лог всех запросов в базе, увидите полную картину.
2. http://php.net/manual/en/function.override-function.php - но придется установить дополнительный модуль для пхп.

подскажите, какой модуль.. никак найти не могу(

T
На сайте с 20.03.2007
Offline
67
Toy
#7
Toy, а на счет обертки функции Вы это и имели ввиду?

Я имел ввиду что-нибудь типо такого.

function mysql_query_new($query) {

echo $query;
return mysql_query($query);
}

И пользоваться функцией с новым именем.

F
На сайте с 06.06.2008
Offline
51
#8

Xakez, если для работы с MySQL использовать не стандартные средства рнр, а классы наподобие котеровского DBSimple, то решение Вашей проблемы готово - класс сам делает логи запросов, а Вы уже решаете как и куда их сохранять. Это и есть обертка, о которой пишет Toy, только более навороченная.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий