Обновление с 2.2.x до 3.0.0

Перед выполнением обновления вы должны переключить ваш сайт в автономный режиме, заменив index.php файл на статический.

Шаг 1: Обновите файлы вашего CodeIgniter

Удалите все содержимое папки “system” и файл index.php. Любые сделаные изменения в файле index.php также должны быть сделаны и вновом файле.

Примечание
Если в этих папках есть файлы не входящие в архив CodeIgniter пожалуйста сделайте сначала их копии.

Шаг 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

Обратите внимание, что это не влияет на каталоги, файлы конфигурации, Вид (views), хелперы (помощники), хуки (hooks) и все остальное - это применимо только к классам.

Вы должны следовать одному простому правилу - имена классов в Ucfirst-подобным образом, а все остальное в нижнем регистре.

Шаг 3: Замените config/mimes.php

Этот конфигурационный файл был обновлен, и содержит больше пользовательских MIME-типов, пожалуйста, скопируйте его _application/config/mimes.php*.

Шаг 4: Удалите $autoload[‘core’] из config/autoload.php

Использование $autoload['core'] конфиг массива устарел с CodeIgniter 1.4.1 и теперь удален. Переместите любые элементы, которые вы, возможно, включили вместо $autoload['libraries'].

Шаг 5: Переместите ваш класс Журнала (Log) в переопределения или расширения

Класс Журнала (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 и теперь поставляется с кучей новых функций, но это также означает, что и Вам нужно будет сделать некоторые изменения...

Самое главное, библиотека теперь использует отдельное хранение драйверов, вместо того чтобы постоянно полагаться на (зашифрованные) куки. На самом деле, куки-файлы, как хранилища были удалены, и вы должны всегда использовать какой-то серверный механизм хранения, установленный по умолчанию в файловой системе.

Класс Сессий теперь использует собственный механизм PHP для создания пользовательских обработчиков сессии, это также означает что теперь данные сессии доступны по суперглобальной $_SESSION (мы сохранили возможность использовать “userdata”, как вы это делали до этого).

Некоторые параметры конфигурации были удалены, а некоторые добавлены. Вам следует полностью прочитать Session library руководство для деталей, но вот краткий список изменений, которые вам необходимо внести:

  • Установите $config['sess_driver'] значение

    По умолчанию это ‘files’, если вы ранее его не использовали $config['sess_use_database'], в противном случае он будет иметь значение ‘database’.

  • Установите $config['sess_save_path'] значение

    Для драйвера ‘database’, резервный вариант $config['sess_table_name'] на месте, но в остальном от вас требуется прочтение руководства для специального драйвера на Ваш выбор.

  • Обновите Вашу ci_sessions таблицу (только ‘database’)

    Структура таблица немного изменилась, и более конкретно:

    • session_id поле переименовано в id
    • user_agent поле удалено
    • user_data поле переименовано в data и в MySQL теперь это тип BLOB
    • last_activity поле переименовано в timestamp

    Это сопровождается незначительными изменениями индексов в таблице тоже, поэтому, пожалуйста, прочитайте руководство Session Database Driver для более подробной информации.

    Важно
    Только MySQL и PostgreSQL поддерживаются официально. Остальные базы данных также остаются рабочими, но из-за отсутствия консультаций они являются небезопасными для параллельных запросов и следует использовать другие БД.
  • Удалите $config['sess_match_useragent']

    Адресная строка браузера предоставляющая ввод данных пользователю, или другими словами: ввод данных на стороне клиента. Как таковая, она является неэффективной характеристикой и следовательно, была удалена.

  • Удалите $config['sess_encrypt_cookie']

    Как уже отмечалось, библиотека больше не использует куки (cookies) как механизм хранения, что делает эту опцию бесполезной.

  • Удалите $config['sess_expire_on_close']

    Эту опцию еще можно использовать, но только в целях обратной совместимости иначе ее следует удалить. Тот же эффект достигается путем установки $config['sess_expiration'] равной 0.

  • Проверьте “flashdata” для столкновений с “userdata”

    Flashdata теперь “userdata”, только помеченные для удаления при следующем запросе. Другими словами: Вы не можете иметь обе “userdata” и “flashdata” с одинаковыми именами, т.к. это одно и тоже.

  • Проверьте использование метаданных сессии

    Раньше, Вы могли получить доступ к ‘session_id’, ‘ip_address’, ‘user_agent’ и ‘last_activity’ метаданным как userdata. Теперь это невозможно, и Вам следует прочесть Session Metadata если Ваше приложение использует эти данные.

  • Проверьте использование unset_userdata()

    Раньше, этот метод использовался для доступа к парам ассоциативного массива 'key' => 'пустое значение' для удаления нескольких ключей. Что впрочем не имеет значения и Вам следует пройтись только по ключам, как по элементам массива.

    // Раньше
    $this->session->unset_userdata(array('item' => '', 'item2' => ''));
    // Теперь
    $this->session->unset_userdata(array('item', 'item2'));
    

Наконец, если Вы написали расширение для сессий, Вы должны переместить его в application/libraries/Session/ каталог, хотя есть вероятность, что его тоже следует пересмотреть.

Шаг 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, шаблон ошибок теперь рассматривается как Виды (views) и был перемещен в _application/views/errors* каталог.

Кроме того, мы добавили поддержку для CLI шаблонов ошибок в обычном текстовом формате что в отличии от HTML, подходит для командной строки. Это конечно, требует другого уровня разделения.

Перемещение старых шаблонов из _application/errors* в _application/views/errors/html* является безопасным, но Вам лучше сделать копии из новой _application/views/errors/cli* папки архива CodeIgniter.

Шаг 9: Обновите Ваш config/routes.php файл

Маршруты содержащие :any

Традиционно, CodeIgniter всегда предоставлял :any подстановку в маршрутизации, с намереньем предоставить соответствие любому символу внутри URI сегмента.

Однако, :any подстановка актуальна для алиасов регулярных выражений и используется как выполнение .+. Это рассматривается как баг, т.к это также соответствует символу / (обратный слэш), который является разделителем URI сегмента что не входило в намерения.

В CodeIgniter 3, :any подстановка не будет соответствовать [^/]+, следовательно не будет соответствовать обратному слэшу.

Есть конечно много разработчиков которые используют этот баг как специальное свойство. Если Вы не один из них и желаете совпадения обратного слэша, пожалуйста используйте .+ регулярное выражение:

(.+)    // не соответствует НИЧЕМУ
(:any)  // соответствует любому символу кроме, '/'

Каталоги и ‘default_controller’, ‘404_override’

Как Вам известно, $route['default_controller'] и $route['404_override'] настройки принимают не только имена контроллеров, но и также controller/method пары. Однако, баг в логике маршрутизации позволил некоторым пользователям использовать его в качестве directory/controller.

Как было сказано, это поведение случайноность и никогда не было ни преднозначено ни документировано. Если Вы расчитывали на это, Ваше приложение сломается на CodeIgniter 3.0.

Другое значительное изменение в версии 3, то что ‘default_controller’ и ‘404_override’ теперь применимо в каталоге. Чтобы объяснить что это значит, давайте рассмотрим следующий пример:

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

Теперь предположим что Ваш сайт размещен на example.com, Вы также знаете что если пользователь посетит http://example.com/, то изходя из настроек будет загружен Ваш ‘Main’ контроллер.

Однако, что произойдет если у Вас есть application/controllers/admin/ каталог и пользователь посетит http://example.com/admin/? В CodeIgniter 3, маршрутизатор будет искать ‘Main’ контроллер из admin/ каталога. Если таков не найден, он будет возвращен к родительской (application/controllers/) папке, как и в версии 2.x.

Такие же правила применимы и для ‘404_override’ параметра.

Шаг 10: Много функций теперь возвращают NULL вместо FALSE на недостающие элементы

Много методов и функций теперь возвращают NULL вместо FALSE когда необходимый элемент не существует:

Шаг 11: Использование XSS фильтрации

Много функций в CodeIgniter позволяют Вам использовать XSS фильтрацию востребованную булевым параметром. Значение по умолчанию этого параметра является булево FALSE, но сейчас оно изменено на NULL и оно будет динамически определяться Вашим $config['global_xss_filtering'] значением.

Если Вы собираетесь в ручную установить булево значение $xss_filter параметра или Вы хотите навсегда установить $config['global_xss_filtering'] равное FALSE, тогда это изменение не должно Вас волновать.

Иначе, пожалуйста пересмотрите Ваше использование следующих функций:

  • Input Library
    • input->get()
    • input->post()
    • input->get_post()
    • input->cookie()
    • input->server()
    • input->input_stream()
  • Cookie Helper get_cookie()

Важно
Другое связанное с этим изменение, то что$_GET, $_POST, $_COOKIE и $_SERVER суперглобальные больше не перезаписываются автоматически когда глобальная XSS фильтрация включена.

Шаг 12: Проверка потенциальных XSS вопросов с URI

URI Library использует автоматическую конвертацию определенных наборов “программных символов” в HTML сущности когда они встречаются в URI сегменте.

Это было направленно на обеспечение некой автоматической XSS защиты, в дополнени к $config['permitted_uri_chars'] параметру, но оказалось проблематичным и в CodeIgniter 3.0. было удалено

Если Ваше приложение пологается на это функцию, Вам следует обновить фильтр URI сегментов через $this->security->xss_clean() всякий раз когды Вы выводите их.

Шаг 13: Проверка использования ‘xss_clean’ правила валидации Форм (Form validation)

Во многом неизвестное правило XSS заключается в том, что применяется только к выходным данным, в отличии от входных данных.

Мы допустили эту ошибку сами с автоматической и глобальной XSS характеристиками чистки (смотрите предыдущий шаг XSS), и теперь для искоренения этой практики, мы также удаляем ‘xss_clean’ из официально поддерживаемого списка form validation правил.

Так как Form Validation library обычно проверяет входные данные, то ‘xss_clean’ правилу просто нет места.

Если Вам действительно, действительно необходимо применить это правило, то Вам также следует подключить Security Helper, который содержит xss_clean() как обычную функцию и поэтому тоже может быть использован в качестве правила проверки.

Шаг 14: Обновите использование в Input Class - get_post() метода

Ранее, в Input Class метод get_post() искал сначала в POST данных, и лишь затем в GET данных. Этот метод был усовершенствован и теперь сначала поиск происходив в GET данных затем в POST, как и предпологается по названию.

Был добавлен метод, post_get(), который сперва ищет в POST затем в GET данных, как это раньше было в get_post().

Шаг 15:Обновите использование в Directory Helper - directory_map() функции

В результирующем массиве, каталоги теперь заканчиваются разделителем каталогов (обычно это слэш "/").

Шаг 16: Обновите использование в Database Forge - drop_table() метода

До сих пор, drop_table() включала IF EXISTS как пункт по умолчанию или же вообще не работала с некоторыми драйверами. В CodeIgniter 3.0, IF EXISTS условие больше не является условием по умолчанию и имеет необязательный второй параметр который позволяет установить его равным FALSE по умолчанию.

If your application relies on IF EXISTS, you’ll have to change its usage.

// Сейчас производит только DROP TABLE `table_name`
$this->dbforge->drop_table('table_name');
// Производит DROP TABLE IF EXISTS `table_name`
$this->dbforge->drop_table('table_name', TRUE);
Примечание
Приведенный выше пример для MySQL синтаксиса, но он также должен работать и с другими драйверами кроме ODBC.

Шаг 17: Поменяйте использование Email library с несколькими письмами

Email Library автоматически очистит заданные параметры после успешной отправки письма. Чтобы переопределить это поведение, установите FALSE в качестве первого параметра send() метода:

if ($this->email->send(FALSE))
{
        // Параметры не будут очищенны
}

Шаг 18: Обновите Ваши Form_validation языковые строки

Два усовершенствования были внесены в Form Validation Library языковый файл и формат ошибки сообщения:

  • Language Library ключи строки должны быть с префиксом form_validation_ для того чтобы избежать столкновения:
    // Старое
    $lang['rule'] = ...
    // Новое
    $lang['form_validation_rule'] = ...
    
  • Формат ошибки сообщения был изменен чтобы использовать именные параметры, для большей гибкости sprintf() предоставлений:
    // Старое
    'The %s field does not match the %s field.'
    // Новое
    'The {field} field does not match the {param} field.'
    

Примечание
Старый формат также работает, но без префикса ключа строки он является УСТАРЕВШИМ и запланировано его удаление в CodeIgniter 3.1+. Поэтому рекомендуется его регулярное обновление.

Шаг 19: Удалите использование (ранее) устаревших функций

В дополнение к $autoload['core'] настройкам конфигураций, есть ряд других функций которые были удалены в CodeIgniter 3.0.0:

SHA1 библиотека

Ранее устаревшая SHA1 библиотека была удалена, измените свой код на чистую PHP sha1() функцию чтобы сгенерировать SHA1 хэш.

Кроме того, sha1() метод в Encrypt Library был удален.

EXT константа (постоянная)

Использование EXT постоянной считается устаревшей начиная с отмены поддержки PHP 4. Теперь нет необходимости поддерживать различные расширения файлов в новой версии CodeIgniter, и EXT постоянная была удалена. Достаточно использовать ‘.php’.

Smiley хелпер

Smiley хелпер это устаревшая функция от EllisLab’s ExpressionEngine. Впрочем, она очень специфическая исключетельно для такого фреймворка как CodeIgniter и поэтому она считается устаревшей.

Также, ранее устаревшая js_insert_smiley() (начиная с версии 1.7.2) функция удалена.

Библиотека шифрования

Изходя из многочисленных уязвимостей, Encrypt Library устарела и новая, Encryption Library добавлена чтобы занять ее место.

Новая библиотека требует также MCrypt расширения (и наличие /dev/urandom) или PHP 5.3.3 и OpenSSL расширения. Это может быть неудобно, но эта необходимость позволяет правильно осуществлять функции шифрования.

Примечание
Encrypt библиотека до сих пор доступна для обеспечения обратной совместимости.
Важно
Рекомендуем перейти на Encryption библиотеку как можно раньше!

Cart библиотека

Cart библиотека, аналогично Smiley хелперу очень специфична для CodeIgniter. Она считается устаревшей и будет удалена начиная с версии CodeIgniter 3.1+.

Примечание
Библиотека до сих пор доступна, но мы настоятельно рекомендуем отказаться от ее использования как можно раньше.

Драйвера Database ‘mysql’, ‘sqlite’, ‘mssql’, ‘pdo/dblib’

Mysql драйвер использует старое ‘mysql’ PHP расширение, в котором известно о устаревшем коде и множественных низкоуровневых проблемах. Расширение устарело до PHP 5.5 и CodeIgniter в версии 3.0, использует MySQL драйвер mysqli.

Пожалуйста используйте ‘mysqli’ или ‘pdo/mysql’ драйвера для MySQL. Старый ‘mysql’ драйвер будет удален в будующих версиях.

Sqlite, mssql и pdo/dblib (также известно как pdo/mssql или pdo/sybase) драйвера зависят от PHP расширений, которые по разным причинам больше не существуют с версии PHP 5.3.

Следовательно мы считаем эти драйвера устаревшими и собираемся их удалить из последующих версий CodeIgniter. Вам следует использовать более совершенные, sqlite3, sqlsrv или pdo/sqlsrv драйвера.

Примечание
Эти драйвера до сих пор доступны, но мы настоятельно рекомендуем отказаться от их использования как можно раньше.

Security хелпер do_hash()

Функция Security хелпера do_hash() является псевдонимом родной PHP hash() функции. Она устарела и будет удалена в CodeIgniter 3.1+.

Примечание
Эти функции до сих пор доступны, но мы настоятельно рекомендуем отказаться от их использования как можно раньше.

Установки $config[‘global_xss_filtering’]

Как уже объяснялось выше, XSS фильтрация не осуществляется для входных данных. Поэтому, $config['global_xss_filtering'], которая автоматически фильтрует входные данные, является плохой практикой и считается устаревшей.

Вместо этого, Вы можете сами обрабатывать любые данные пользователя используя xss_clean() функцию когда Вам необходимо вывести их, или использовать библиотеку HTML Purifier которая сделает это.

Примечание
Эти установки до сих пор доступны, но мы настоятельно рекомендуем отказаться от их использования как можно раньше.

File хелпер read_file()

Функция File хелпера read_file() является псевдонимом родной PHP file_get_contents() функции. Она устарела и будет удалена в CodeIgniter 3.1+.

Примечание
Эта функция до сих пор доступна, но мы настоятельно рекомендуем отказаться от ее использования как можно раньше.

String хелпер repeater()

Функция String хелпера repeater() является псевдонимом родной PHP str_repeat() функции. Она устарела и будет удалена в CodeIgniter 3.1+.

Примечание
Эта функция до сих пор доступна, но мы настоятельно рекомендуем отказаться от ее использования как можно раньше.

String хелпер trim_slashes()

Функция String хелпера trim_slashes() является псевдонимом родной PHP trim() функции (с передоваемым слэшем как второй аргумент). Она устарела и будет удалена в CodeIgniter 3.1+.

Примечание
Эта функция до сих пор доступна, но мы настоятельно рекомендуем отказаться от ее использования как можно раньше.

Form хелпер form_prep()

Функция Form хелпера form_prep() является псевдонимом common function html_escape(). Она устарела и будет удалена в будующем.

Пожалуйста используйте вместо нее html_escape().

Примечание
Эта функция до сих пор доступна, но мы настоятельно рекомендуем отказаться от ее использования как можно раньше.

Функции Email хелпера

Email хелпер имеет только две функции

Обе являются псевдонимами родных PHP filter_var() и mail() функций, соответственно. Поэтому Email хелпер считается устаревшим и будет удален в CodeIgniter 3.1+.

Примечание
Эти функции до сих пор доступны, но мы настоятельно рекомендуем отказаться от их использования как можно раньше.

Date хелпер standard_date()

Функция Date хелпера standard_date() устарела с появлением родных PHP констант, которые с использованием date() обеспечивали такую же функциональность. Более того, они имеют точно такие же названия, как те же что и предоставлялись в standard_date(). Вот тпримеры как заменить их использование:

// Старый способ
standard_date(); // defaults to standard_date('DATE_RFC822', now());
// Замена
date(DATE_RFC822, now());
// Старый способ
standard_date('DATE_ATOM', $time);
// Замена
date(DATE_ATOM, $time);
Примечание
Эта функция до сих пор доступна, но мы настоятельно рекомендуем отказаться от ее использования как можно раньше, т.к. ее удаление запланировано в CodeIgniter 3.1+.

HTML хелперы nbs(), br()

Функции HTML хелпера nbs() и br() являются псевдонимами родных str_repeat() функций используемых с   и > соответсвенно.

Так как нет смысла использовать псевдонимы родных PHP функций, они считаются устаревшими и запланировано их удаление в CodeIgniter 3.1+.

Примечание
Эти функции до сих пор доступны, но мы настоятельно рекомендуем отказаться от их использования как можно раньше.

Настройка ‘anchor_class’ библиотеки Pagination

Pagination библиотека теперь поддерживает добавление более удобных HTML атрибутов к якорям используя настройки конфигурации ‘attributes’. Эти настройки передают атрибут ‘class’ и использование настройки ‘anchor_class’ больше не имеет смысла. Исходя из этого, настройка ‘anchor_class’ считается устаревшей и запланировано ее удаление в CodeIgniter 3.1+.

Примечание
Эта настройка до сих пор доступна, но мы настоятельно рекомендуем отказаться от ее использования как можно раньше.

Типы ‘unique’ и ‘encrypt’ хелпера String функции random_string()

При использовании String хелпера функции random_string(), больше не требуется передавать unique и encrypt типы. Они лишь псевдонимы md5 и sha1 соответсвенно, и являются устаревшими с последующим их удалением в CodeIgniter 3.1+.

Примечание
Эти опции до сих пор доступны, но мы настоятельно рекомендуем отказаться от их использования как можно раньше.

Разделители ‘dash’ и ‘underscore’ URL хелпера функции url_title()

При использовании URL Helper функции url_title(), больше не требуется передавать dash или underscore как разделитель слова. Эта функция не будет принимать ни один параметр и чтобы передать символ непосредственно, нужно писать ‘-‘ вместо ‘dash’ и ‘_’ вместо ‘underscore’.

dash и underscore являются устаревшими и будут удалены в CodeIgniter 3.1+.

Примечание
Эти опции до сих пор доступны, но мы настоятельно рекомендуем отказаться от их использования как можно раньше.

Метод all_userdata() библиотеки Session

Как видно в журнале изменений, метод Session библиотеки userdata() теперь позволяет делать выборку всей информации просто опуская параметр:

$this->session->userdata();

Это позволяет методу all_userdata() redudant и теперь это псевдоним userdata() с показаным выше использованием, и теперь считается устаревшей и будет удалена в CodeIgniter 3.1+.

Примечание
Этот метод до сих пор доступен, но мы настоятельно рекомендуем отказаться от его использования как можно раньше.

Database Forge метод add_column() с AFTER оговоркой

Если Вы используете третий параметр для Database Forge метода add_column() чтобы добавить поле с AFTER оговоркой, то Вам необходимо заменить ее использование.

Третий параметр устарел и будет удален в CodeIgniter 3.1+.

Теперь необходимо указывать оговорку AFTER для имен полей в поле определения массива:

// Старое использование:
$field = array(
        'new_field' => array('type' => 'TEXT')
);
$this->dbforge->add_column('table_name', $field, 'another_field');
// Новое использование:
$field = array(
        'new_field' => array('type' => 'TEXT', 'after' => 'another_field')
);
$this->dbforge->add_column('table_name', $field);
Примечание
Этот параметр до сих пор доступен, но мы настоятельно рекомендуем отказаться от его использования как можно раньше.
Примечание
Касается только MySQL и CUBRID БД! Остальные драйвера не поддерживают эту оговорку и проигнорируют его.

URI Routing методы fetch_directory(), fetch_class(), fetch_method()

Со свойствами CI_Router::$directory, CI_Router::$class и CI_Router::$method были также публичными и их соответствия fetch_*() больше не делает ничего, чтобы вернуть свойства - поэтому не имеет смысла хранить его.

Это все внутрение, недокументированные методы, но мы относим их к устаревшим в порядке поддержки обратной совместимости. Если Вы используете какие-то из них, для доступа к ним используйте:

$this->router->directory;
$this->router->class;
$this->router->method;
Примечание
Эти методы до сих пор доступны, но мы настоятельно рекомендуем отказаться от их использования как можно раньше.

Метод is_cli_request() Input библиотеки

Вызывать CI_Input::is_cli_request() метод являлось необходимостью во многих местах внутри CodeIgniter и обычно перед загрузкой Input библиотеки. Исходя из этого, он был заменен на общую функцию is_cli() и теперь этот метод просто псевдоним.

Доступны обе функции, использование новой функции короче.

// Старое
$this->input->is_cli_request();

// Новое
is_cli();

CI_Input::is_cli_request() является устаревшей и будет удален в CodeIgniter 3.1+.

Примечание
Этот метод до сих пор доступен, но мы настоятельно рекомендуем отказаться от его использования как можно раньше.

Метод system_url() Config библиотеки

Использование CI_Config::system_url() соответствует небезопасному стилю кодирования. А именно, в CodeIgniter system/ папка не должна быть доступна из публичного доступа с точки зрения безопасности.

Поэтому, этот метод устарел и будет удален в CodeIgniter 3.1+.

Примечание
Этот метод до сих пор доступен, но мы настоятельно рекомендуем отказаться от его использования как можно раньше.

Javascript библиотека

Javascript библиотека всегда имела ‘эксперементальный’ статус и являлась больше беcполезной чем полезной.

Она устарела и будет удалена в CodeIgniter 3.1+.

Примечание
Эта библиотека до сих пор доступна, но мы настоятельно рекомендуем отказаться от ее использования как можно раньше.

Шаг 20: Проверьте highlight_phrase() использование Text хелпера

HTML тэг используемый по умолчанию Text хелпера функции highlight_phrase() был изменен с <strong> на новый HTML5 тэг <mark>.

Пока Вы используете собственные тэги подсветки, с ними могут возникать проблемы у пользователей старых версий браузеров, таких как Internet Explorer 8. Поэтому мы советуеи, чтобы Вы добавили в CSS файл следующие строки для обеспечения совместимости со старыми браузерами:

mark {
	        background: #ff0;
	        color: #000;
};