将Codeigniter从1.7.2升级到3.1.6

时间:2017-11-22 10:52:42

标签: php codeigniter

我需要将我的codeigniter从1.7.2升级到3.1.6。我看到中间有很多中间版本。有没有快速的方法,或者我应该遵循两者之间的每次更新?

2 个答案:

答案 0 :(得分:4)

我刚从2.1.6升级到3.1.6。最简单的方法是在新目录中全新安装3.1.6。配置类似于当前prod站点的所有内容... config.php,database.php,.htaccess等等。将所有控制器/模型/视图从您的prod站点复制到新站点。请记住使用正确的Ucase表示法重命名新模型/控制器/库文件...例如:home.php在3.x中变为Home.php。

一旦测试了新网站,只需重命名目录即可从旧网站切换到新网站。比尝试修改旧网站更容易。如果您需要还原,您的旧网站仍然存在。

答案 1 :(得分:2)

根据官方Codeigniter的文档,它说你需要一步一步地升级它。 这是链接Upgradation Link for official CI Website。 不知何故通过研究我了解了这一步骤 1.无论如何,您需要使用上面的链接手动更新到2.2.x,但在此版本之后您可以直接跳转到3.x版本

这是方法:

  

预先要求的警告:在执行更新之前,您应该参加   通过将index.php文件替换为静态文件来脱机站点。

第1步:更新CodeIgniter文件 替换系统/目录中的所有文件和目录,并替换index.php文件。如果对index.php进行了任何修改,则需要在这个新版本中进行修改。

  

注意:您必须先删除旧的系统/目录然后再​​放入   取而代之的是新的。简单的复制粘贴可能会导致问题。

第2步:更新类文件名 从CodeIgniter 3.0开始,所有类文件名(库,驱动程序,控制器和模型)必须以类似Ucfirst的方式命名,或者换句话说 - 它们必须以大写字母开头。

例如,如果您有以下库文件:

application/libraries/mylibrary.php

...然后你必须将其重命名为:

application/libraries/Mylibrary.php

对于CodeIgniter自己的库和核心类的驱动程序库和扩展和/或覆盖也是如此。

application/libraries/MY_email.php application/core/MY_log.php

上述文件应分别重命名为:

application/libraries/MY_Email.php application/core/MY_Log.php

控制器:

application/controllers/welcome.php -> application/controllers/Welcome.php

型号:

application/models/misc_model.php -> application/models/Misc_model.php

请注意,这不会影响目录,配置文件,视图,帮助程序,钩子等等 - 它只适用于类。

你现在必须遵循一个简单的规则 - Ucfirst中的类名和小写的其他所有内容。

第3步:替换config / mimes.php 此配置文件已更新为包含更多用户mime类型,请将其复制到application / config / mimes.php。

第4步:从config / autoload.php中删除$ autoload ['core']

从CodeIgniter 1.4.1开始,不推荐使用$ autoload [' core']配置数组,现在已删除。将您可能在其中列出的任何条目移动到$ autoload [' libraries']。 第5步:移动Log类覆盖或扩展

Log Class被视为“核心”类,现在位于system / core /目录中。因此,为了使您的Log类覆盖或扩展能够工作,您需要将它们移动到application / core /:

application/libraries/Log.php -> application/core/Log.php application/libraries/MY_Log.php -> application/core/MY_Log.php

第6步:更新会话库使用情况

会话库已在CodeIgniter 3中完全重写,现在附带了许多新功能,但这也意味着您应该进行更改... 已删除一些配置选项,并添加了一些配置选项。您应该阅读整个会话库手册以获取详细信息,但这里有一个简短的更改列表:

    Set your $config['sess_driver'] value

    It will default to ‘files’, unless you’ve previously used $config['sess_use_database'], in which case it will be set to ‘database’.

    Set a $config['sess_save_path'] value

    For the ‘database’ driver, a fallback to $config['sess_table_name'] is in place, but otherwise requires you to read the manual for the specific driver of your choice.

    Update your ci_sessions table (‘database’ driver only)

    The table structure has changed a bit, and more specifically:

            session_id field is renamed to id
            user_agent field is dropped
            user_data field is renamed to data and under MySQL is now of type BLOB
            last_activity field is renamed to timestamp

    This is accompanied by a slight change in the table indexes too, so please read the manual about the Session Database Driver for more information.

    Remove $config['sess_match_useragent']

    The user-agent string is input supplied by the user’s browser, or in other words: client side input. As such, it is an ineffective feature and hence why it has been removed.

    Remove $config['sess_encrypt_cookie']

    As already noted, the library no longer uses cookies as a storage mechanism, which renders this option useless.

    Remove $config['sess_expire_on_close']

    This option is still usable, but only for backwards compatibility purposes and it should be otherwise removed. The same effect is achieved by setting $config['sess_expiration'] to 0.

    Check “flashdata” for collisions with “userdata”

    Flashdata is now just regular “userdata”, only marked for deletion on the next request. In other words: you can’t have both “userdata” and “flashdata” with the same name, because it’s the same thing.

    Check usage of session metadata

    Previously, you could access the ‘session_id’, ‘ip_address’, ‘user_agent’ and ‘last_activity’ metadata items as userdata. This is no longer possible, and you should read the notes about Session Metadata if your application relies on those values.

    Check unset_userdata() usage

    Previously, this method used to accept an associative array of 'key' => 'dummy value' pairs for unsetting multiple keys. That however makes no sense and you now have to pass only the keys, as the elements of an array.

    // Old
    $this->session->unset_userdata(array('item' => '', 'item2' => ''));

    // New
    $this->session->unset_userdata(array('item', 'item2'));

最后,如果你已经编写了一个Session扩展,你现在必须将它移到application/libraries/Session/ directory,,尽管它现在也可能需要重新计算。

第7步:更新config / database.php

由于3.0.0将Active Record重命名为Query Builder,在config / database.php中,您需要将$ active_record变量重命名为$ query_builder:

$active_group = 'default';
// $active_record = TRUE;
$query_builder = TRUE;

第8步:替换错误模板

在CodeIgniter 3.0中,错误模板现在被视为视图,并已移至application / views / errors目录。

此外,我们添加了对纯文本格式的CLI错误模板的支持,这与HTML不同,适用于命令行。这当然需要另一层次的分离。

将旧模板从应用程序/错误移动到application / views / errors / html是安全的,但您必须从CodeIgniter存档中复制新的application / views / errors / cli目录。 第9步:更新config / routes.php文件 路线包含:任何

历史上,CodeIgniter始终提供:路由中的任何通配符,旨在提供匹配URI段中任何字符的方法。

然而,:任何通配符实际上只是正则表达式的别名,并且曾经以这种方式执行。+。这被认为是一个错误,因为它也匹配/(正斜杠)字符,这是URI段分隔符,而且从来没有意图。

在CodeIgniter 3中,:任何通配符现在都代表[^ /] +,因此它不会与正斜杠匹配。

肯定有很多开发人员将此漏洞用作实际功能。如果您是其中之一并且想要匹配正斜杠,请使用。+正则表达式:

(。+)//匹配任何东西 (:any)//匹配任何字符,除了' /'

目录和'default_controller','404_override'

正如您所知,$ route [' default_controller']和$ route [' 404_override']设置不仅接受控制器名称,还接受控制器/方法对。但是,路由逻辑中的错误使某些用户可以将其用作目录/控制器。

如前所述,这种行为是偶然的,从未打算过,也没有记录。如果您依赖它,您的应用程序将破坏CodeIgniter 3.0。

版本3中另一个值得注意的变化是现在每个目录都应用'default_controller'和'404_override'。为了解释这意味着什么,让我们来看下面的例子:

$ route [' default_controller'] =' main';

现在,假设您的网站位于example.com,您已经知道如果用户访问http://example.com/,则上述设置将导致您的“主”控制器被加载。

但是,如果您有application / controllers / admin /目录并且用户访问http://example.com/admin/会发生什么?在CodeIgniter 3中,路由器也将在admin /目录下查找“Main”控制器。如果未找到,将触发未找到(404)。

同样的规则适用于'404_override'设置。

最后一步:对于所有进一步丢失的文件/文件夹/设置 链接在这里 Link