Aplikacja ScriptCase nie działa po aktualizacji PHP – jak przenieść ją na PHP 8
Po zmianie PHP aplikacja ScriptCase pokazuje tylko błędy? Gdzie zwykle leżą problemy i jak porządnie przenieść aplikację na aktualne PHP.
W skrócie: aplikację ScriptCase, która przestała działać po zmianie PHP na serwerze, w większości przypadków da się uratować. Właściwa droga: wygenerować aplikację ponownie w aktualnej wersji ScriptCase, wgrać pasujące środowisko produkcyjne i dostosować własny kod w zdarzeniach (events) i bibliotekach do nowego PHP. Ręczne poprawianie wygenerowanego kodu to tylko rozwiązanie awaryjne, bo przy następnym generowaniu zmiany znikną.
ScriptCase to narzędzie, które generuje w PHP formularze, listy, raporty i całe aplikacje biznesowe. Wiele firm zbudowało w nim przed laty obsługę zamówień, magazyn albo bazę klientów. Aplikacja działa, wszyscy są zadowoleni, dopóki hosting albo dział IT nie wgra nowej wersji PHP. Wtedy pojawiają się białe strony, komunikaty o błędach albo przestaje działać logowanie.
Dlaczego aplikacje ScriptCase psują się na nowym PHP
ScriptCase generuje kod PHP dopasowany do wersji PHP, które były aktualne w czasie danej wersji ScriptCase. Jeśli aplikację wygenerowano starym ScriptCase, zawiera kod dla starego PHP. Do tego dochodzą trzy inne miejsca, w których pojawiają się problemy:
- Własny kod w zdarzeniach. Prawie każda aplikacja ScriptCase ma ręcznie pisany kod PHP, np. w onLoad, onValidate czy onAfterInsert. Często są tam funkcje, których nie ma już w nowym PHP, np.
mysql_query(),each()albocreate_function(). - Biblioteki wewnętrzne i aplikacje typu Blank. Tu często siedzi większość logiki biznesowej i tu najmniej testowano.
- Środowisko produkcyjne. Wygenerowane aplikacje potrzebują na serwerze bibliotek ScriptCase (folder
_lib). Jeśli to środowisko nie pasuje do wersji ScriptCase, w której generowano, albo do wersji PHP na serwerze, nie zadziałają nawet bezbłędne aplikacje.
Krok 1: inwentaryzacja
- W jakiej wersji ScriptCase projekt był ostatnio generowany?
- Czy projekt istnieje jeszcze w instalacji ScriptCase, czy na serwerze są tylko wygenerowane pliki?
- Czy jest ważna licencja ScriptCase? Bez niej nie da się ponownie generować.
- Jaka wersja PHP działa na serwerze, a jaka ma być docelowo?
- Jakiej bazy danych używa aplikacja i czy jest to wspierana wersja?
Drugie pytanie jest najważniejsze. Jeśli projekt istnieje już tylko jako wygenerowany kod, bez pliku projektu ScriptCase, zmienia się cała strategia. Wtedy chodzi raczej o migrację niż o aktualizację.
Krok 2: zobaczyć błędy
Bez komunikatu o błędzie każda naprawa to zgadywanie. Na kopii testowej proszę włączyć wyświetlanie błędów PHP albo przeczytać log błędów serwera. Typowe komunikaty:
Call to undefined function mysql_connect(): stare funkcje bazy danych, usunięte w PHP 7.0.Call to undefined function each()albocreate_function(): usunięte w PHP 8.0.count(): Argument #1 ($value) must be of type Countable|array, null given: surowsze sprawdzanie typów od PHP 8.0.Creation of dynamic property … is deprecated: ostrzeżenie od PHP 8.2, jeszcze nie awaria.
Jeśli ścieżka pliku prowadzi do własnego zdarzenia albo biblioteki, to Państwa kod. Jeśli do wygenerowanego kodu albo _lib, przyczyną jest wersja ScriptCase.
Krok 3: wygenerować ponownie i dostosować własny kod
- Zrobić kopię projektu i bazy danych.
- Zaimportować projekt do aktualnej wersji ScriptCase.
- Dostosować własny kod w zdarzeniach, metodach i bibliotekach do nowego PHP.
- Wygenerować ponownie wszystkie aplikacje.
- Dokładnie przetestować w środowisku testowym z nowym PHP i pasującym środowiskiem produkcyjnym, na prawdziwych procesach użytkowników.
- Dopiero wtedy przenieść na serwer produkcyjny.
Większe skoki między wersjami ScriptCase czasem zmieniają działanie formularzy, menu albo modułów bezpieczeństwa. Trzeba zaplanować na to czas na testy.
Kiedy aktualizacja przestaje się opłacać
- Brakuje pliku projektu, jest tylko wygenerowany kod.
- Licencja wygasła i nie ma być przedłużana.
- W wygenerowanym kodzie tyle zmieniano ręcznie, że ponowne generowanie wszystko by nadpisało.
- Brakuje podstawowych funkcji, które w ScriptCase trudno zrealizować.
Wtedy zwykle lepiej stopniowo zastąpić aplikację własnym kodem PHP. Jak to wygląda, opisuję w artykule Zastąpienie aplikacji ScriptCase.
Profesjonalna pomoc
Sam pracuję w ScriptCase i przenoszę istniejące aplikacje na aktualne PHP: inwentaryzacja, dostosowanie własnego kodu, ponowne generowanie, testy i przekazanie. Więcej w usłudze programista ScriptCase. Gdy sytuacja jest niejasna, zaczynam od analizy za 150 € netto. Po niej wiadomo, czy lepsza będzie aktualizacja, czy zastąpienie aplikacji.