2011-09-11 129 views
3

我很好奇,想知道是否有一種方法可以讓我做出自己的phpinfo()函數?覆蓋phpinfo()函數?

function phpinfo() { 
    // show custom list of php.ini settings here 
} 

我試過這個,但我得到一個解析錯誤,因爲我命名我的函數與PHP內置函數相同。我知道你可以改變phpinfo()輸出其數據(顏色等)的方式,但我還沒有找到一種方法可以過濾頁面的內容。

我讓人們在註冊時做出子域名,並讓我們讓他們託管自己的文件,但是我不想限制phpinfo輸出,以便他們只能看到我讓他們看到的內容。

我完全控制了我的PHP安裝,因爲我正在專用服務器上運行我的站點,如果這有幫助的話。

+0

'phpinfo'裏有什麼你不想讓他們看到? – icktoofay

+5

您正在賦予他們在服務器上執行代碼的能力。試圖限制phpinfo中的數據是浪費時間。 – gview

+0

是真實的,但我想定製它以在一個組中顯示最重要的設置,以便查看直通。 – Eli

回答

3

您可以使用runkit_function_rename重命名舊的phpinfo。重命名後,您可以定義一個名爲phpinfo的新函數。如果你需要調用舊函數,只需用新名稱來調用它。或者,如果您不需要調用舊功能,則可以使用runkit_function_remove將其刪除。

這些解決方案的問題是,如果他們知道您重命名的名稱,他們可以調用該名稱以獲取原始輸出。最好的解決方案可能是修改PHP源代碼來過濾phpinfo輸出的內容。

編輯:下面是如何使用runkit_function_rename的示例。我沒有runkit安裝,所以我不能測試,看看是否可行與否,但它可能:

runkit_function_rename('phpinfo', 'old_phpinfo'); 

function phpinfo() { 
    ob_start(); 
    old_phpinfo(); 
    $data=ob_get_contents(); 
    ob_end_clean(); 
    $data=str_replace("php", "(the language you're using)", $data); 
    echo $data; 
} 
+0

多數民衆贊成輝煌!我想爲默認的phpinfo()創建自己的包裝,這可能會做到這一點。嗯,我可以在哪裏使用'runkit_function_name',你可以給我一個快速骯髒的使用示例。 – Eli

+0

雅,即時對不起,我沒有看到你已經掩蓋了鏈接!我剛剛閱讀了關於此的PHP文檔。謝謝你太多了。 – Eli

0

你可以使用php.ini指令disable_functions停用標準的phpinfo功能,這將允許你來定義你自己的。請參閱http://php.net/manual/en/ini.core.php

我不認爲這是一條很好的路線。你需要能夠信任你允許上傳代碼到你的服務器的人。我不認爲phpinfo()輸出中有太多的東西不能通過其他方式獲得。

+0

即時通訊不試圖審查我的用戶,我只是試圖用我獨特的風格重新創建輸出以匹配我的自定義CMS,並使輸出更容易瀏覽。把所有重要的常用擴展設置放在最上面等等。 – Eli