PHP5.3開發-解決DEPRECATED錯誤問題


2011-05-17 16:08:45 來源:SeaYee

當前大部分用PHP語言寫的網站都是基於PHP 5.2的,很多服務器配置的環境所謂支持的PHP 5也是PHP 5.2版本的。當然還有少數網站是基於PHP 4的,不過慢慢越來越多的人開始使用PHP 5.3。

PHP 5.3從一方面來講,可以說在2007年計劃PHP 6的中的一個PRE版本,增加了很多功能,統一了很多語法,使PHP變得更加強大與簡潔。PHP 5.3開始,爲了更好的向PHP 6過渡,將未來不再支持的函數標記爲DEPRECATED。在代碼中使用這些函數,將毫不留情的在頁面中顯示警告信息:“使用了過時的函數…”,諸如此類。

一、配置文件遷移

PHP 5.3開始,配置文件php.ini中的一些的配置(註釋用#)將會在PHP執行時顯示過時警告,這些配置將在PHP 6中不再存在,相關功能也將關閉。

1、define_syslog_variables

是否定義各種系統日誌變量,如:$LOG_PID, $LOG_CRON 等等。

關掉它以提高效率的好主意。

你可以在運行時調用define_syslog_variables()函數來定義這些變量。

2、register_globals

是否將 E, G, P, C, S 變量註冊爲全局變量。

打開該指令可能會導致嚴重的安全問題,除非你的腳本經過非常仔細的檢查。

推薦使用預定義的超全局變量:$_ENV, $_GET, $_POST, $_COOKIE, $_SERVER 。

該指令受variables_order指令的影響。

3、register_long_arrays

是否啓用舊式的長式數組(HTTP_*_VARS)。

鼓勵使用短式的預定義超全局數組,並關閉該特性以獲得更好的性能。

4、safe_mode

SYS

是否啓用安全模式。

打開時,PHP將檢查當前腳本的擁有者是否和被操作的文件的擁有者相同,相同則允許操作,不同則拒絕操作。

5、magic_quotes_gpc

是否對輸入的GET/POST/Cookie數據使用自動字符串轉義( ' " \ NULL )。

這裏的設置將自動影響 $_GEST $_POST $_COOKIE 數組的值。

若將本指令與magic_quotes_sybase指令同時打開,則僅將單引號(')轉義爲(''),

其它特殊字符將不被轉義,即( " \ NULL )將保持原樣!!

建議關閉此特性,並使用自定義的過濾函數。

6、magic_quotes_runtime

是否對運行時從外部資源產生的數據使用自動字符串轉義( ' " \ NULL )。

若打開本指令,則大多數函數從外部資源(數據庫,文本文件等)返回數據都將被轉義。

例如:用SQL查詢得到的數據,用exec()函數得到的數據,等等。

若將本指令與magic_quotes_sybase指令同時打開,則僅將單引號(')轉義爲(''),其它特殊字符將不被轉義,即( " \ NULL )將保持原樣!!

建議關閉此特性,並視具體情況使用自定義的過濾函數。

7、magic_quotes_sybase

是否採用Sybase形式的自動字符串轉義(用 '' 表示 ')。

二、函數遷移

1、call_user_method()

可以用call_user_func()替代。

2、call_user_method_array()

可以用call_user_func_array()替代。

3、dl()

反對在使用DL加載擴展,PHP 5.3以後應用php.ini配製。

4、ereg()

可以用preg_match()替代。

5、ereg_replace()

可以用preg_replace()替代。

6、eregi()

可以用preg_match()模式‘i’替代。

7、eregi_replace()

可以用preg_replace()模式‘i’替代。

8、set_magic_quotes_runtime()

可以用magic_quotes_runtime()替代。

9、session_register()、session_unregister()、session_is_registered()

以上三個統一用$_SESSION替代。

10、set_socket_blocking()

可以用stream_set_blocking()替代。

11、split()

可以用preg_split()替代。

12、spliti()

可以用preg_split()模式‘i’替代。

13、sql_regcase()、mysql_db_query()

可以用mysql_select_db()、mysql_query()替代。

14、mysql_escape_string()

可以用use mysql_real_escape_string()替代。

15、關於時區處理,統一用Timezone對像。

三、PHP 5.3特點

1、直接返加new實例不再建議使用,PHP 6將不再支持。

2、Call-time pass-by-reference參數現在不再建議使用,PHP 6將不再支持。

3、用{}訪問字符串順序不再建議使用,統一用[]代替,PHP 6 將不再支持。

四、後注

當然如果項目緊急,又要在PHP 5.3使用以上方法,可以配置php.ini中的error_reporting值爲“E_ALL & ~E_NOTICE & ~E_DEPRECATED”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章