php hook core functions

2020-03-26 08:45发布

问题:

I want to hook before execution / or replace standart core functions, for example i im going to prevent both include and require accesa to any scripts. Is any way to make it without any extra .dll's? Or another case is_array($myarr); i would be to hook at array($myarr) === $myarr; (looks like it is faster) to avoid creating extra classes and functions.

Ps and one more question : how to prevent all php execution after some moment? I have html templates with php parts <?=$myvar?> i want to prevent short sintax and execution at all when my script ends work, what i have to try?

回答1:

About hooks to standart functions: there is no way to do that without external modules. APD PECL module will do the job.

rename_function('require', 'internal_require'); // saving reference to original function
override_function('require', '$filename', 
                  'print "require called"; internal_require($filename);');

Second question is not very clear. Do you want to hook on standart is_array function, to array() lexical construct or (array) type casting?

About stopping php interpretation: have a look at __halt_compiler function. But keep in mind that succeeding blocks of php will be just embedded in HTML (thus visible to everybody).



回答2:

If you want to disable functions, you can use safe mode, but it is deprecated and not recommended. And as madfriend says, __halt_compiler just sends everything below it as text. Bear in mind that it can only be called from the outermost scope - I.e. not inside curly braces (if, loops, functions etc.)