2009-07-13 47 views
4

有沒有什麼神奇工具可以用來掃描爲PHP4編寫的源代碼,以突出顯示PHP5中不推薦使用的函數?我目前正在服務器上運行最新版本的PHP,並需要移植此代碼。那裏有什麼可以幫我一把嗎?用於突出顯示PHP4源中不推薦使用的函數的工具?

+1

不推薦使用的函數列表不夠用。如果接收到的參數不是預期的類型,那麼用於接受某些參數的某些函數現在會引發錯誤。 IIRC,array_merge()就是一個例子 - 它用來接受NULL參數;現在,如果任何參數不是數組,它會拋出一個錯誤。長話短說,確保從PHP 4遷移到5的唯一真正方法是完成測試。 – 2009-07-13 20:39:56

+0

也不推薦分配新引用的返回值。這是一場噩夢。 – 2009-07-17 17:17:31

回答

5

如果您設置了錯誤報告級別以顯示它們,PHP 5.3將拋出一個E_DEPRECATED警告。

+0

事情是我可以修復每個發生時的錯誤,但我正在尋找一種方式來掃描所有來源。我目前正在修復這些錯誤,但是當我測試軟件時,我可能會錯過一些可能不會出現的錯誤。 – 2009-07-13 18:04:56

0

appendices of the manual包含一些遷移信息,但我不認爲它包含您正在查找的內容。

單向(可能不準確,但可以使用)我想到的是每個PHP下載中包含的news.txt。我是writing a script atm,它解析這個文件,檢查不推薦使用的函數可能是我可以添加的東西。我正在研究另一個項目atm,但我想在更大的重建版本中添加這個功能。

1

我想自己做這樣的事情。使用的deprecated features in PHP 5.3.x這個名單,我做了一個正則表達式來搜索任何使用這些功能:

(?i:(call_user_method\(|call_user_method_array\(|define_syslog_variables\(|dl\(|ereg\(|ereg_replace\(|eregi\(|eregi_replace\(|set_magic_quotes_runtime\(|session_register\(|session_unregister\(|session_is_registered\(|set_socket_blocking\(|split\(|spliti\(|sql_regcase\(|mysql_db_query\(|mysql_escape_string\()) 

(不區分大小寫,每個函數名,包括左括號只是爲了避免誤報;「DL」會帶來。佔用大量噪音的其他方式)

如果你與findgrep的系統上,然後你可以只執行這樣的:

find <directory to search> -type f -name '*.php' -exec grep -R -P -H "<above regex>" {} \; 

只是爲了讓一個更具體的例子,我只是用了以下內容:

find htdocs -type f -name '*.php' -exec grep -R -P -H "(?i:(call_user_method\(|call_user_method_array\(|define_syslog_variables\(|dl\(|ereg\(|ereg_replace\(|eregi\(|eregi_replace\(|set_magic_quotes_runtime\(|session_register\(|session_unregister\(|session_is_registered\(|set_socket_blocking\(|split\(|spliti\(|sql_regcase\(|mysql_db_query\(|mysql_escape_string\())" {} \; 

看起來像我現在需要更換的session_registersession_unregister自己的幾個實例!

對於不推薦的INI指令和參數可以做同樣的事情。