[英]Upgrade Codeigniter from 1.7.2 to 3.1.6
我需要将Codeigniter从1.7.2升级到3.1.6。 我看到两者之间有很多中间版本。 有没有一种快速的方法,或者我应该关注之间的每个更新?
我刚刚从2.1.6升级到3.1.6。 最简单的方法是在新目录中全新安装3.1.6。 配置与您当前的生产站点类似的所有内容... config.php,database.php,.htaccess等,等等。将所有控制器/模型/视图从生产站点复制到新站点。 记住要使用正确的Ucase标记来重命名新的模型/控制器/库文件...例如:home.php在3.x中变为Home.php。
测试新站点后,只需重命名目录即可从旧目录切换到新目录。 比尝试修改旧站点更容易。 而且,如果您需要还原,则旧站点仍然存在。
根据官方Codeigniter的文档,它说您需要逐步进行升级。 这是官方CI网站的升级链接 。 通过某种方式的研究,我对步骤1有所了解。您需要通过上述链接手动更新到2.2.x,但是在此版本之后,您可以直接跳至3.x版本
方法如下:
前提条件警告:在执行更新之前,您应该通过将index.php文件替换为静态文件来使站点离线。
步骤1:更新您的CodeIgniter文件替换system /目录中的所有文件和目录,并替换index.php文件。 如果对您的index.php进行了任何修改,则需要在此新版本中重新进行修改。
注意 :您必须先删除旧的system /目录,然后将新目录放到原位置。 简单的复制粘贴可能会导致问题。
步骤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类替代或扩展
日志类被认为是“核心”类,现在位于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 / errors移到application / views / errors / html是安全的,但是您必须从CodeIgniter存档中复制新的application / views / errors / cli目录。 步骤9:更新您的config / routes.php文件包含:any的路由
从历史上看,CodeIgniter始终在路由中提供:any通配符,目的是提供一种匹配URI段中任何字符的方法。
但是,:any通配符实际上只是正则表达式的别名,并且以前以。+的方式执行。 这被认为是一个错误,因为它也与/(正斜杠)字符匹配,该字符是URI段定界符,而绝不是故意的。
在CodeIgniter 3中,:any通配符现在将表示[^ /] +,因此它将不与正斜杠匹配。
当然,有很多开发人员已将此错误用作实际功能。 如果您是其中之一,并且想匹配正斜杠,请使用。+正则表达式:
(。+)//匹配任何内容(: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 /目录下查找“主”控制器。 如果未找到,则将触发“未找到”(404)。
相同的规则适用于“ 404_override”设置。
最后一步:对于所有其他丢失的文件/文件夹/设置,这里是链接Link
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.