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