當前位置:才華齋>計算機>php語言>

從 PHP 4 移植到 PHP 5 網站程式哪些需要修改

php語言 閱讀(2.64W)
從 PHP 4 移植到 PHP 5 網站程式哪些需要修改
  儘管大部分 PHP 4 的程式碼應該不用修改就能執行,還是應該留意以下不向下相容的改變,就跟隨本站小編一起去了解下吧,想了解更多相關資訊請持續關注我們應屆畢業生考試網!  ■有了一些新關鍵字。  ■strrpos() 和 strripos() 如今使用整個字串作為 needle。  ■非法使用字串偏移量會導致 E_ERROR 而不是 E_WARNING。一個非法使用的例子:$str = 'abc'; unset($str[0]);.  ■array_merge() 被改成只接受陣列。如果傳遞入非陣列變數,對每個此類引數都會發出一條 E_WARNING 資訊。要小心因為你的程式碼有可能瘋狂發出 E_WARNING。  ■PATH_TRANSLATED 服務器變數在 Apache2 SAPI 中不再暗中設定,這和 PHP 4 中的情形相反,如果 Apache 沒產生此值則其被設為和 SCRIPT_FILENAME 伺服器變數一樣的值。此修改是為了遵守 ? CGI 規範。更多資訊見 ? bug #23610,並參考手冊中 $_SERVER['PATH_TRANSLATED'] 的說明。此問題也影響到 PHP >= 4.3.2 的版本。  ■Tokenizer 擴充套件不再定義 T_ML_COMMENT 常量。如果把 error_reporting 設為 E_ALL,PHP 將產生一條訊息。儘管 T_ML_COMMENT 從來都沒用到過,還是在 PHP 4 中定義了。在 PHP 4 和 PHP 5 中 // 和 /* */ 都被解析為 T_COMMENT 常量。但是 PHPDoc 風格的註釋 /** */,自 PHP 5 開始被 PHP 解析,被識別為 T_DOC_COMMENT。  ■如果 variables_order 包括“S”,$_SERVER 應該帶有 argc 和 argv 被產生。如果使用者特別配製系統不建立 $_SERVER,那此變數當然就不存在了。改變的地方是不管 variables_order 怎麼設定,在 CLI 版本中 argc 和 argv 總是可用的。本來 CLI 版不是總會產生全域性變數 $argc 和 $argv 的。  ■沒有屬性的物件不再被當成“empty”。  ■有些情況下類必須在使用前被定義。這僅在使用了一些 PHP 5 的新特性(例如 interfaces)的時候發生。其它情況下行為都沒變。  ■get_class(),get_parent_class() 和 get_class_methods() 如今返回的類/方法名和定義時的名字一致(區分大小寫),對於依賴以前行為(類/方法名總是返回小寫的)的老指令碼可能產生問題。一個可能的解決方法是在指令碼中搜索所有這些函式並使用 strtolower()。 區分大小寫的改變也適用於魔術常量 __CLASS__,__METHOD__ 和 __FUNCTION__。其值都會嚴格按照定義時的名字返回(區分大小寫)。  ■ip2long() 在傳遞入一個非法 IP 作為引數時返回 FALSE,不再是 -1。  ■如果有函式定義在包含檔案中,則這些函式可以在主檔案中使用而與是否在 return() 指令之前還是之後無關。如果檔案被包含兩次,PHP 5 會發出致命錯誤,因為函式已經被定義,而 PHP 4 不管這個。因此推薦使用 include_once() 而不要去檢查檔案是否已被包含以及在包含檔案中有條件返回。  ■include_once() 和 require_once() 在 Windows 下先將路徑規格化,因此包含 和 只會把檔案包含一次。  Example #1 strrpos() 和 strripos() 如今用整個字串作為 needle  <?php  var_dump(strrpos('ABCDEF','DEF')); //int(3)  var_dump(strrpos('ABCDEF','DAF')); //bool(false)  ?>  Example #2 沒有屬性的物件不再被當成“empty”  <?php  class test { }  $t = new test();  var_dump(empty($t)); // echo bool(false)  if ($t) {  // Will be executed  }  ?>  Example #3 有些情況下類必須在使用之前定義  <?php  //works with no errors:  $a = new a();  class a {  }  //throws an error:  $a = new b();  interface c{  }  class b implements c {  }  ?>  PHP 5 裡的新函式。下面是列表:  Arrays:  ■array_combine() - 用一個數組作為鍵名,另一個數組作為值建立一個新陣列  ■array_diff_uassoc() - 計算陣列的差別,並用使用者提供的回撥函式作附加的索引檢查  ■array_udiff() - 用回撥函式比較資料來計算陣列的差別  ■array_udiff_assoc() - 計算陣列的差別並作附加的'索引檢查。用回撥函式來比較資料  ■array_udiff_uassoc() - 計算陣列的差別並作附加的索引檢查。資料的比較和索引檢查都用回撥函式來完成  ■array_walk_recursive() - 對陣列的每個成員遞迴使用使用者函式  ■array_uintersect_assoc() - 計算陣列的交集並作附加的索引檢查。用回撥函式來比較資料  ■array_uintersect_uassoc() - 計算陣列的交集並作附加的索引檢查。資料和索引都用回撥函式來比較  ■array_uintersect() - 計算陣列的交集。用回撥函式來比較資料  InterBase:  ■ibase_affected_rows() - 返回前一個查詢影響到的行的數目  ■ibase_backup() - 在服務管理器中發起一個後臺任務並立即返回  ■ibase_commit_ret() - 提交一個事務但不關閉  ■ibase_db_info() - 請求有關資料庫的統計資訊  ■ibase_drop_db() - 刪除一個數據庫  ■ibase_errcode() - 返回一個錯誤程式碼  ■ibase_free_event_handler() - 取消一個已註冊的事件控制代碼  ■ibase_gen_id() - 遞增指定的發生器並返回其新值  ■ibase_maintain_db() - 在資料庫伺服器上執行一條維護命令  ■ibase_name_result() - 給結果集指定一個名字  ■ibase_num_params() - 返回一個準備好的查詢的引數數目  ■ibase_param_info() - 返回一個準備好的查詢的引數資訊  ■ibase_restore() - 在服務管理器中發起一個還原任務並立即返回  ■ibase_rollback_ret() - 回捲一筆事務並保留事務上下文  ■ibase_server_info() - 請求有關資料庫伺服器的統計資訊  ■ibase_service_attach() - 連線到服務管理器  ■ibase_service_detach() - 從服務管理器斷開  ■ibase_set_event_handler() - 註冊一個當事件釋出時要呼叫的回撥函式  ■ibase_wait_event() - 等待資料庫釋出一條事件  iconv:  ■iconv_mime_decode() - 解碼 MIME 頭資訊欄位  ■iconv_mime_decode_headers() - 一次解碼多個 MIME 頭資訊欄位  ■iconv_mime_encode() - 壓縮 MIME 頭資訊欄位  ■iconv_strlen() - 返回字串中的字元計數  ■iconv_strpos() - 在堆疊中找到第一個出現的子串位置  ■iconv_strrpos() - 在堆疊中找到最後一個出現的子串位置  ■iconv_substr() - 從字串中取出一部分  Streams:  ■stream_copy_to_stream() - 把一個流的資料複製到另一個流  ■stream_get_line() - 根據給定的分隔符中流中讀取一行  ■stream_socket_accept() - 接受一個由 stream_socket_server() 建立的 socket 連線  ■stream_socket_client() - 開啟一個 Internet 或 Unix 域的 socket 連線  ■stream_socket_get_name() - 獲取本地或遠端的 sockets 名字  ■stream_socket_recvfrom() - 從 socket 獲取資料(不管連線是否已經建立)  ■stream_socket_sendto() - 向 socket 傳送一個訊息(不管連線是否已經建立)  ■stream_socket_server() - 建立一個 Internet 或 Unix 域伺服器的 socket  Date/Time:  ■idate() - 將本地時間格式化為整數  ■date_sunset() - 計算所指定日期和地點的日落時間  ■date_sunrise() - T計算所指定日期和地點的日出時間  ■time_nanosleep() - 廷遲執行程若干秒和若干納秒  Strings:  ■str_split() - 把一個字串分割為陣列  ■strpbrk() - 在一字串中搜索給定的字元集合中的任意一個字元  ■substr_compare() - 以二進位制的形式比較兩個字串,從第一個字串的 offset 開始,直到到達長度為 length 時結束,可自定義是否大小寫敏感比較  Other: