Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват/переопределение стандартных функций, Возможно ли? 
V
    Опции темы
Alex13
Дата 6.12.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



Возник вопрос: можно ли в PHP скрипте перехватить или просто отследить все вызовы некоторой встроенной функции (file_get_contents(), в частности)? Или можно ли как-нибудь ее переопределить?

Естественно, писать свой модуль для php не хочется, ибо для виртуального хостинга такое решение не работало бы.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
bars80080
Дата 6.12.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



можно просто написать свою функцию по принципу:

Код

function myfunc($x) {
    savefgc($x);
    $y = file_get_contents($x);
    return $y;
}

где savefgc() - сохраняет запрос в нужном виде
а затем заменить все file_get_contents на myfunc
PM MAIL WWW   Вверх
dark_religion
Дата 7.12.2008, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 8.9.2006

Репутация: нет
Всего: -3



) Но это не переопределит функцию) Это добавит к ней функциональность) А если нужно изменить ее работу) Такое решение не подойдет!
PM MAIL   Вверх
skyboy
Дата 7.12.2008, 09:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



dark_religion, окей. тогда измени PHP в исходниках, перекомпилируй и используй измененную версию.
PM MAIL   Вверх
Alex13
Дата 7.12.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



bars80080, идея состоит в том, что есть уже довольно большой код, написанный различными программистами (cms и пачка плагинов), который постоянно обновляется и дополняется. Вручную всякий раз заменять все вызовы - совсем не интересно, а доверять это автоматике не хочется, ибо она не всегда может себя адекватно повести.

skyboy, я уже рассматривал вариант с модулем для php, но это совершенно непортабельное решение. Хотелось бы найти вариант, который работал бы и в условиях шаред хостинга.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
skyboy
Дата 7.12.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Alex13 @  7.12.2008,  12:53 Найти цитируемый пост)
Вручную всякий раз заменять все вызовы - совсем не интересно

так замени один раз.
используя шаблон проектирования "Адаптер" реализуешь обертку для функции. И потом меняешь только обертку в одном месте. Тебе же так и предложил bars80080. Или ты к тому, что сторонние программисты про такую функцию-посредник знать-не знают и при любом их(сторонних программистов) лишнем толодвижении придется менять их исходники, заменяя вызываемые функции? 
PM MAIL   Вверх
Alex13
Дата 7.12.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



skyboy, именно так. Эти программисты от меня не зависят, я их в глаза не видел и вообще большая часть из них буржуи. Так что менять код не хочется.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
skyboy
Дата 7.12.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Alex13, а что, если определить интерфейс своей системы? ни в какой известной мне системе, сторонние модули не работают напрямую с памятью ядра, а используют некией функции-составные интерфейса. если возможно, поставь вопрос так, чтоб не было работы с БД/файлами/сокетами напрямую, а только через определенный тобою интерфейс. хотя бы, чтоб вместо обращения к функции напрямую было обращение к "базе функций": типа вместо "fopen($var);" выполнять "library('fopen', array($var))". в таком случае и тебе проще, и система надежнее: проще исправлять несовместимости, расширять функционал, отслеживать вызовы. Конечно, в случае усиленной нагрузки это может сказаться на производительности, но при таком подходе ты сразу забесплатно получаешь систему кеширования резльтатов выполнения фунцкий(особенно актуально для сложных с длительным выполнением).
PM MAIL   Вверх
Alex13
Дата 7.12.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



skyboy, я наверное невнятно выразился. Есть некий движок, есть набор модулей к нему, разрабатываются они все разными людьми. Разработчиком cms я не являюсь и на внутренние стандарты влиять не могу. Мноя задача состоит в том, чтобы поддерживать сайт на ней. Для отладочных целей мне понадобилось отслеживать вызовы определенного набора встроенных функций и я ищу способ минимальной кровью решить эту задачу.

В любом случае, спасибо зп то, что откликнулись smile


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
MuToGeN
Дата 16.12.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 4
Всего: 32



http://ru2.php.net/manual/en/function.runk...on-redefine.php
если правильно понял...


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Alex13
Дата 16.12.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



MuToGeN, оно самое, спасибо!
Жаль только, что идет как стороннее расширение, но за неимением лучшего...


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
PETRUHA
Дата 23.12.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.10.2008

Репутация: нет
Всего: нет



PM MAIL   Вверх
Alex13
Дата 23.12.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



PETRUHA, тоже вариант, но опять требуется ставить малопопулярное расширение.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
sTa1kEr
Дата 23.12.2008, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Не советую использовать runkit в боевых условиях, т.к. он крайне не стабилен. И тем более APD. Хотя для отладки на какой-либо локальной машине, конечно, может подойти.

Как один из вариантов, если это не к спеху, можно дождаться выхода php 5.3 и просто использовать свой неймспейс со своим стандартными функциями.
PM MAIL   Вверх
Alex13
Дата 23.12.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



sTa1kEr, тогда наверное буду ждать.
Ибо безопасностью жертвовать - не дело.

Спасибо за совет.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.