Migracja z PHP 5.6 do 8.2 bez przepisywania całej aplikacji

0

Witam, muszę zmienić wersję php a co znaczy tez cała składnie w mojej starej aplikacji, która jest napisana w php 5.6. Przydało by się zmienić do wersji do 8.2 ma ktoś z was pomyśl jak to można zrobić nie przepisując ręcznie całej aplikacji?

2

Są testy?

6

Najlepiej po kolei, najpier do 7.0, potem 7.1, 7.2, 7.3, 7.4, 8.0, 8.1 i ostatecznie 8.2.

nie musisz od razu używać wszystkich feater'ów z 8.2. Wystarczy żę pozbędziesz się usuniętych.

Albo nie musisz przepisywać, tylko możesz ją odpalać nadal na 5.6 lub na dockerze.

3

Aplikacja jest w jakimś framework, czy pisana z palca? Jak jest duża i czy ma jakieś testy?

Ogólnie zobacz sobie co to jest rector
Ma zestawy gotowych reguł i można w miarę łatwo przejść z wersji do wersji PHP czy zastąpić wycofane funkcje języka.

0

Testy głównie robiłem owaspem i była pisana bez żadnego frameworka.
Widziałem już czym jest rector ludzie to instalowali i przez cmd i od razu do aplikacji masz w tym jakieś doświadczanie?

0
Elo Leo napisał(a):

Testy głównie robiłem owaspem

Przyznam się, że nie rozumiem. Możesz rozwinąć?

Co do rectora to właściwie wszystko co jest potrzebne jest dokładnie opisane w readme i dokumentacji.

0
Elo Leo napisał(a):

Testy głównie robiłem owaspem i była pisana bez żadnego frameworka.

Chodzi o testy jednostkowe - unit testy, nie testy bezpieczeństwa. Najczęściej robione przez phpunitest. Wychodzi na to, że ich nie masz. Warto nawet teraz przed upgradem coś dopisać. Pokaże Ci to czy wynik działania jakiejś funkcji przed i po aktualizacji jest dokładnie taki sam. Jeśli nie jest to gdzie jest błąd.

Widziałem już czym jest rector ludzie to instalowali i przez cmd i od razu do aplikacji masz w tym jakieś doświadczanie?

Mam, korzystałem kilka razy. Podsumowując rady z postów. Jak pisał @Riddle uruchamiasz po kolei zestawy reguł dla update do PHP 7.0 - testujesz. 7.1 - testujesz itd.

2

Dobrze by było najpierw znać skalę problemu. Wiele może podpowiedzieć PHPSTORM Code Inspection. Być może tego przepisywania wcale nie będzie tak dużo.

0

Ulepszyłem po kolei kod od 5.6x do 8.2x za pomocą rectora. Główny problem, którego rector nie naprawił był z autoloadem rector nie zmienił nic a stara funkcja __autoload() została zastąpiona w PHP 7.2 na spl_autoload_register. Po zniwelowaniu tego błędu zaczęły się problemy z includowaniem baz danych itp. Po za komentowaniu linijek kodu odpowiedzialnych za to zamiast błędów na localhoscie jest tylko i wyłącznie białe tło co już kiedyś przy innych projektach się pojawiało z aktualizowaniem PHP. PhpStorm po naprawieniu autoloada po analizie wsypuje pełno błędów związanych z MYSQL i przedawnieniem użytej składni. Oprócz tego PhpStorm już ładnie wskazuje na wersje kodu po aktualizacji na PHP 8.1. Teraz rozchodzi się tylko pytanie czy rector jest w stanie poprawić też składnie MYSQL

1
  1. generalnie autoload z PSR-0 jest deprecated i lepiej zapoznać się z PSR-4,
  2. funkcje mysqli są deprecated, czas przerzucić się na obiektowe https://www.php.net/manual/en/book.mysqli.php lub PDO (też obiektowe),
  3. błędy na produkcji nie powinny być wyświetlane, jeśli chcesz włączyć (edit: do testowania lokalnie) ta opcję to trzeba to włączyć w ustawieniach PHP (to odnośnie białych stron),
  4. rektor nie poprawi składni mysqli jeśli ta jest funkcyjna a nowa jest obiektowa.
1

Zobacz dokładnie skąd są błędy. Rector przynajmniej część rzeczy z konwersją przy kodzie proceduralnym z mysql do mysqli robił. Ale i mysqli powinno powoli umrzeć.
https://github.com/rectorphp/rector/issues/2766
Już dawno nie upgradowowalem kodu z 5.6
Widzę tylko i aż, że jednak nie zastosowałeś rady, żeby iść wersja po wersji i testować co nie działa, bo to już nie powinno działać przy podniesieniu wersji do 7.0
Powinna być na to reguła:

rectorConfig->sets([
        SetList::MYSQL_TO_MYSQLI,
    ]);
0

Będę sprawdzać wersja po wersji dziś zdążyłem tylko cokolwiek skleić na szybko dziękuje za pomoc i dam znać jak zrobię jakieś postępy

jurek1980 napisał(a):

Zobacz dokładnie skąd są błędy. Rector przynajmniej część rzeczy z konwersją przy kodzie proceduralnym z mysql do mysqli robił. Ale i mysqli powinno powoli umrzeć.
https://github.com/rectorphp/rector/issues/2766
Już dawno nie upgradowowalem kodu z 5.6
Widzę tylko i aż, że jednak nie zastosowałeś rady, żeby iść wersja po wersji i testować co nie działa, bo to już nie powinno działać przy podniesieniu wersji do 7.0
Powinna być na to reguła:

rectorConfig->sets([
        SetList::MYSQL_TO_MYSQLI,
    ]);

`

0

Wersja 5.6
bez poważnych błędów wszystko śmiga
Wersja 7.0
Problem jak zawsze z autoloadem, musiałem naprawić
mysql_real_escape_string was removed in 7.0 PHP version jest to błąd który pojawia się najczęściej i jak ustaliśmy już wcześniej rector nie zmienia kody php związanym z zapytań do baz danych mysql

Odnośnie MYSQL_TO_MYSQLI
znalazłem w oficjalnej dokumentacji coś takiego
https://getrector.com/demo/b9f01671-2498-4d45-bfa6-ccb390933d61
ale wyrzuca im taki błąd
Rector run Failed:

{"fatal_errors":["Undefined constant Rector\Set\ValueObject\SetList::MYSQL_TO_MYSQLI"]}

mi taki
PS F:\xampp\htdocs> vendor/bin/rector process --dry-run
PHP Fatal error: A void function must not return a value in F:\xampp\htdocs\rector.php on line 32
Fatal error: A void function must not return a value in F:\xampp\htdocs\rector.php on line 32

lub taki
[ERROR] Undefined constant Rector\Set\ValueObject\SetList::MYSQL_TO_MYSQ

(suport odpisał że ten zestaw reguł został usunięty)

Inne narzędzie które znalazłem to Qodana

oferuje też migracje php ale udało mi się znaleźć o tym w internecie bardzo mało jedyne co to z oficjalnej strony:
https://www.jetbrains.com/help/qodana/php-language-upgrade.html
ale w interecie jest o tym jeszcze mniej wiadomości niż o rectorze jedyne informacje jak to skonfigurować znalazłem w linku powyżej

Żeby podsumować moje pytanie brzmi czy będę musiał po kolei zmieniać funkcje z zapytaniami MYSQL bo chyba nie widzę innego wyjścia

2

Jeszcze spróbuj sobie użyć starszej wersji Rector gdzie taka lista/reguła była dostępna.
Patrzę na telefonie i w losowo wybranej starszej wersji coś z potrzebnego kodu jest:
https://github.com/rectorphp/rector/tree/0.13.8/rules
Nie wiem jak duży masz projekt ale jeśli to nie tysiące linii kodu to można poświęcić chwilę i przerobić to od razu na PDO.

0

W starszych wersjach recotra występował jeden błąd:
[ERROR] Could not process some files, due to:
"Child process error: PHP Notice: RectorPrefix202208\Nette\Utils\Strings::toAscii(): it is recommended to
enable PHP extensions 'intl'. in
F:\xampp\htdocs\vendor\rector\rector\vendor\nette\utils\src\Utils\Strings.php:124
Notice:
RectorPrefix202208\Nette\Utils\Strings::toAscii(): it is recommended to enable PHP extensions 'intl'. in
F:\xampp\htdocs\vendor\rector\rector\vendor\nette\utils\src\Utils\Strings.php:124
".
testowałem wersje v.0.13.8 i v.0.14, ale nie wpływało to ostatecznie na działanie rectora
MYSQL_TO_MYSQLI
Ta komenda działała ale nie jest rozwiązaniem na wszystkie problemy dalej nie zmienia się linijka kodu, która najczęściej wywala błąd, więc będę musiał robić to ręcznie. Myślę że najlepiej będzie ulepszyć kod rectorem do 8.2 i poprawić ręcznie to co się nie zmieniło. Na Anglojęzycznych forach często da się znaleźć rozwiązanie przestarzałej linii kodu

0

Na forach często znajdziesz info żeby zamienić wyrażenie mysql na mysqli itp. Ale jak już spróbuj użyć PDO. Może nie będziesz miał tyłu zapytań do przeróbki.
W komunikatach o błędzie z tym Rector masz info, żeby włączyć i użyć rozszerzenia intl w php.ini - to jakbyś jeszcze chciał próbować.

0

Naprawa tego nic nie dała. Więc ulepszam swój projekt i będę próbować przepisać resztę ręcznie jak będę mieć z problemy czymś jeszcze będę pisać. Dziękuje za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1