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”。