PHP-5.3向更高版本遷移之不兼容

PHP 5.4不兼容內容

熟悉php

  • 安全模式的移除(safe_mode),涉及到php.ini配置指令
    安全模式開啓,限制PHP中的一些內置函數的使用
    代碼中若是有依賴於安全模式保障安全的內容,須要調整
  • 移除魔術引號(magic_quote),涉及到php.ini配置指令
    魔術引號自動對用戶提交數據轉義(包括沒必要要轉義的數據),性能低下
    魔術引號的效果和使用 addslashes() 函數同樣
    爲避免出現安全問題,任何依賴魔術引號特性的代碼都須要修改
    移除模式引號後,對僅須要存儲到數據庫中的數據進行addslashes()操做
  • 調用時的引用傳遞被移除mysql

    <?php
    function foo(&$var)
    {
        $var = 'hello, word';
        var_dump($var);
    }
    $var = 1111;
    foo($var);//正確的調用方法
    foo(&$var);//過時用法,報出一個警告錯誤
    ?>
  • 在日期與時間擴展中,再也不支持時區使用 TZ(TimeZone)環境變量設置
    php.ini中強烈建議配置date.timezone
    或者在程序入口腳本配置環境時,使用date_default_timezone_set()設定時區算法

  • 數組轉換成字符串將產生一條 E_NOTICE 級別的錯誤,但返回的結果還是字符串 "Array"
  • 如今參數名使用全局變量將會致使一個致命錯誤sql

    <?php
    //這樣的代碼,報致命錯誤 
    function foo($_GET, $_POST) {};
  • 當使用兩個空數組做爲參數時, array_combine() 如今返回 array() 而不是 FALSE數據庫

  • trait,callable,insteadof成爲新的保留字,在函數和類名中不可以使用

瞭解windows

  • register_globals 和 register_long_arrays php.ini 指令被移除
  • break 和 continue 語句再也不接受可變參數數組

    <?php
    define('VAR', 10);
    while(true)
    {
      while(true)
      {
        //正確寫法
        break 10;
        continue VAR;
        //錯誤寫法
        break 10 - $var;
        contnue $var * 10;
      }
    }
  • NULL 、FALSE 、或 一個空字符串被添加成一個對象的屬性時將發出一條 E_WARNING 級別的錯誤,而不是 E_STRICT安全

  • Salsa10 和 Salsa20 哈希算法 被移除
  • 強烈建議不要再使用 eregi()
  • 移除的函數session

    define_syslog_variables() 
      import_request_variables()  
      session_is_registered() 、 session_register() 以及 session_unregister() 
      mysqli_bind_param() 、 mysqli_bind_result() 、 mysqli_client_encoding()
      mysqli_fetch() 、 mysqli_param_count() 、 mysqli_get_metadata()
  • 過期的函數函數

    mcrypt_generic_end()  
    mysql_list_dbs()
  • sqlite擴展被移到 pecl擴展中,不包含在PHP發行版中

PHP5.5不兼容內容

熟悉

  • 原始的 MySQL 擴展 如今被廢棄(不推薦使用,下版本將會移除)
    當鏈接到數據庫時會產生一個 E_DEPRECATED 錯誤。可以使用 MySQLi 或 PDO_MySQL 擴展做爲替代

瞭解

  • windows xp & windows server 2003支持取消。還在使用這兩個環境就太out了
  • 移除 PHP logo GUIDs組函數
    php_logo_guid()
    php_egg_logo_guid()
    php_real_logo_guid()
    zend_logo_guid()
  • preg_replace() 中的 /e 修飾符被標識爲不推薦使用
    替代方案是使用 preg_match_replace
  • mcrypt 中的下列函數過時(在將來版本會被移除)

    mcrypt_cbc()  
    mcrypt_cfb()  
    mcrypt_ecb()  
    mcrypt_ofb()
  • intl 中的廢棄
    IntlDateFormatter::setTimeZoneID() 和 datefmt_set_timezone_id() 如今被廢棄
    可分別使用 IntlDateFormatter::setTimeZone() 方法和 datefmt_set_timezone() 函數做爲替代

  • pack() 和 unpack() 函數的變化 添加了Z格式和perl兼容 這兩個函數在二進制接口使用
相關文章
相關標籤/搜索