Если скрипт запустился по http - пусть и дальше выполняется. Он должен закончиться через несколько секунд (а длительные скрипты запускать по http - это ламерство) или сам умрет раньше при попытке вывода на экран.
Если же длительное задание отложено в очередь и уже началась его обработка в консоли, то можно определять факт закрытия страницы по факту разрыва соединения с сокет-сервером и им же отправлять событие в консольный скрипт.
1. ajax надо отправлять не сразу же, а лишь по сабмиту формы
2. ajax обработает location не так, как вам хочется. Он загрузит новую страницу внутрь div
Потому что это одно и то же правило. Срабатывает первое.
Для роутера что 'region', что 'city' - это просто имена переменных, в которые он запишет значение.
Вместо дублирования верхнего и нижнего регистра надо использовать модификатор "i".
Символ "i" есть как в $OnlyEn, так и в $Eng.
Зачем русские символы менять на английский с похожим написанием? И наоборот.
Не учитывается, что в предложении могут быть знаки препинания.
Поиск частичного вхождения не имеет никакого отношения ни к русскому, ни к английскому языкам. Например, этот алгоритм считает слова "пар", "парк", Париж", "парикмахерская" и пр. - одним и тем же словом.
Если уж решается задача поиска вхождения, то не надо изобретать велосипед с квадратными колесами. Проще отрезать окончание и вызвать готовую функцию ru2.php.net/manual/en/function.mb-stristr.php
Возможно, $this->session->data - это не массив, а magic-функция get. Соответственно, необходимо написать magic-функцию set или записывать данные по-другому.