Преход на рамката на Kohana от php 5

В исторически план jeka.by е написан на рамкатаkohana 3.2 и използва, както всичко по онова време, php 5 (независимо дали php 5.2 или 5.3).

2017 г. е, което означава, че е крайно време да преминете към php 7.

Тук ще напиша какви промени трябваше да направя в кода на проекта.

1. Актуализирах Kohana до последната стабилна версия 3.3.0.

a) Всички модули са заменени с нови. И също така замени системната папка. Преименувах някои от моите папки и ги препратих към index.php, bootstap.php, така че директориите и имената на класовете да започват с главна буква вместо с малка, пример:

b) Премахнат метод в kohana 3.3:

вместо него, трябва да регистрирате пренасочване навсякъде във формата:

2. PHP 7 най-накрая премахна поддръжката за разширението mysql (трябва да използвате mysqli или pdo). В същото време драйверът на kohana mysqli все още не се е появил официално!

Следователно трябва да намерим и свържем модула mysqli за kohana. Взех модула от github https://github.com/tomlankhorst/kohana-3.3-mysqli.

Включих модула както обикновено вapplication/bootstrap.php в масива Kohana::modules:

Трябва също да промените типа адаптер вapplication/config/database.php от MySQL на MySQLi.

3. Един ред номер 121 във файла modules/pagination/classes/Kohana/Pagination.php трябва да се актуализира, за да съответства на синтаксиса на php 7, като се добавят фигурни скоби: $config_file-> :

В противен случай ще има грешка ErrorException [Notice]: Преобразуване на масив в низ в класа Pagination:

грешка

4. Следната грешка ще възникне само в kohana, ако използвате разширението Memcache.

PHP разширението Memcache не е заредено

Грешката възниква, защото това разширение не е пуснато от разработчиците подСедмата версия на php (можете да опитате да я изградите с дръжки, но не е предоставен готов пакет).

Като алтернатива сега ще използваме memcached. Съответно трябва да намерите и изтеглите модула memcached за kohana. Взех този модул от github - https://github.com/gimpe/kohana-memcached

В допълнение към включването на модула в bootstrap.php, не забравяйте да промените драйвера в конфигурациятаapplication/config/cache.php от memcache на memcached.

kohana

Грешката не е в ядрото на kohana, а в 3rdparty. Възниква грешка (предупреждение) във функцията returnBytes:

Това се случва, когато се опитаме в php 7.1 (в php 7.0 всичко е наред!) да умножим низ по число:

Решението е да вмъкнете преобразуване към цяло число преди конструкцията за превключване:

Предупреждавайте за невалидни низове в аритметиката

при извършване на аритметични операции с невалидни низове ще има предупреждение с текст "Предупреждение за невалидни низове в аритметиката". В зависимост от нивото на настройките може да бъде хвърлено изключение.

6. Следната грешка може да възникне в неочакван момент, когато нещо се обърка.

ErrorException [ Фатална грешка ]: Uncaught TypeError: Аргумент 1, предаден на Kohana_Kohana_Exception::handler() трябва да бъде екземпляр на Exception, даден екземпляр на Error

Грешката в php 7 kohana се дължи на промени в механизма за обработка на грешки в php 7.