2012-07-29 103 views
2

我想在執行之前掛鉤/或者替換standart核心函數,例如我要去阻止includerequire accesa到任何腳本。有沒有辦法讓它沒有任何額外的.dll的?或者另一種情況is_array($myarr);我會在array($myarr) === $myarr;,看起來更快)掛鉤,以避免創建額外的類和函數。php hook核心函數

Ps和一個問題:如何防止一段時間後所有的PHP執行?我有用PHP部分的HTML模板<?=$myvar?>我想防止short sintax和執行所有當我的腳本結束工作,我必須嘗試?

+0

布爾override_function( 字符串$前執行, 串$ function_args, 串$函式) – 2012-07-29 14:43:46

回答

2

關於標準功能的鉤子:沒有外部模塊就沒有辦法做到這一點。 APD PECL module 將完成這項工作。

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

第二個問題不是很清楚。你想鉤上標準is_array函數,到array()詞法構造還是(array)類型鑄造?

關於停止php解釋:看看__halt_compiler函數。但請記住,成功的php塊將嵌入HTML中(因此每個人都可以看到)。

+0

謝謝,很好的答案。關於第二 - 是的,我想路由standart func - 到我的哪個更快。而關於halt_compiler,如果它足夠正則表達式刪除所有內部的PHP標籤,以避免可見? – Jacob88 2012-07-29 17:40:21

+0

@ Jacob88你可以用上面提供的方法實現你的'is_array'。至於刪除php標籤內的所有內容,我強烈建議您使用任何高級文本編輯器(或流編輯器)來做,而不是試圖動態地做到這一點。只需使用「搜索和替換」工具即可。 – madfriend 2012-07-29 17:50:51

+0

需要注意的是,像'require'或'include'這樣的語句不能被覆蓋 – yoda 2018-02-28 05:49:35

0

如果要禁用功能,可以使用安全模式,但不推薦使用它。正如madfriend所說,__halt_compiler只是將它下面的所有內容都作爲文本發送。請記住,它只能從最外面的範圍調用 - 即,內部沒有大括號(如,循環功能等)