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兼容 这两个函数在二进制接口使用
相关文章
相关标签/搜索