PHP 8.0 blev udgivet udgivet 26. november 2020. Programmeringssproget der driver WordPress hjemmesider, kommer nu i en ny udgave som selvfølgelig indeholder nye funktioner som specielt udviklerne vil synes om. Disse forbedringer skal efter dokumentationen være højere sikkerhed og hurtigere performance. Det fjerner også nogle forældede funktioner, som blev sat til at være forældet i den tidligere version af PHP. PHP 8 er hvad jeg vil kalde en massiv ændring ift. dens forgængere.

I denne artikel vil jeg forsøge at belyse detaljer der har med WordPress brugere at gøre og komme med et udkast til at strategi for hvordan du kommer over på PHP 8, når tiden er inde.

Skal jeg bare opgradere med det samme?

Nej! Den seneste version af WordPress, v. 5.6 er på nuværende tidspunkt kun beta kompatibel med PHP 8. Det betyder at det mest af kernen i WordPress vil fungere, men du kan forvente uventede fejl fra tid til anden, selv uden at have installeret plugins og temaer. Teamet bag WordPress tester på livet løs i øjeblikket for at finde fejl og implementere løsninger, så vi alle kan opgradere.

Adskillige plugin- og temaudviklere tester i øjeblikket deres software med PHP 8 og så sent som i går kom der en opdatering fra et af de helt store plugins WP Bakery, som gør den kompatibel med både WordPress 5.6, men også PHP 8. Det er blot et spørgsmål om tid, før vi ser alle plugins og temaer være kompatible med den nye version.

Hvilke store ændringer vil der være?

Nogle udviklere har i lang tid forsøgt at argumentere for at PHP er et usikkert sprog som standard at kode i. Det er der selvfølgelig en heftig debat om.. Det er sandt at tidligere version af PHP er mere fejltollerante og det kan være svært at lave kode, der vil køre selv hvis små fejl måtte opstå.

Det er sådan at i PHP 8, bliver der gjort brug af en meget mere streng politik når der skrives, end i tidligere versioner. Mange indbyggede funktioner er nu mere strengente med hvilke inputs de vil acceptere og PHP 8 i sig selv er mere strengent om hvordan input bliver levret til funktioner. Problemer som tidligere har resulteret i små notifikationer er nu advarsler og problemer der tidligere var advarsler er nu fejl.

Med andre ord, PHP 8 er langt mere strengent end de tidligere version. Det vil ikke forsøge at hjælpe programmørerne med at få koden til at køre, selvom der måtte være fejl i den.

Som jeg nævnte tidligere, er nogle funktioner forældet i PHP 7.x – disse bliver nu fuldstændigt fjernet. Det inkluderer:

  • $php_errormsg variablen
  • create_function() funktionen
  • mbstring.func_overload ini biblioteket
  • real typen
  • allow_url_include ini biblioteket
  • restore_include_path() funktionen
  • each() funktionen

Selvom de fleste udviklere har valgt at gå væk fra disse og opdatere deres kode, findes der desværre stadig et hav af WordPress plugins som benytter nogle af disse funktioner. Det betyder at rigtig rigtig mange plugins skal refaktoreres før de kan blive kompatible med PHP 8 og dermed brugbare i en WordPress installation der kører på den nyeste PHP platform.

Ret mange plugins og temaer er afhængige af tredjepart-biblioteker. Her kunne jeg godt forestille mig, at WordPress udviklere er nødt til at vente indtil disse er opdateret til at være kompatible med PHP 8. Hvis disse biblioteker ikke vedligeholdes eller opdateres til, at være kompatible med PHP 8, kommer vi til at se udviklere der selv må lave grene af bibliotekerne og vedligeholde dem eller simpelthen finde alternativer. Det kan også være det kommer til at føre til plugins og temaer, der bliver skrevet om fra bunden og dermed har mindre bloatware.

Hvilke sikkerhedsudfordringer er der?

PHP tillader noget kaldet “Type Juggling”. Kort fortalt på dansk betyder det at PHP kan behandle strenge med numre på samme måde som integers (heltal) og floats (kommatal). Det kan tilmed udføre matematiske operationer og lave sammenligninger mellem forskellige tper, så længe sammenligningsoperatoren == bruges fremfor den strengente operator ===. For udviklere kan Type Juggling være en utrolig nyttig ting, som kan spare dem tid når de skriver kode, men det kan også i af og til lede til uventet opførsel af softwaren.

Et klassisk eksempel er hvis du sammenligner 0 med “bla bla” – det vil returnere true. I den nye version (PHP 8), bliver denne form for “opførsel” løst, så dette vil returnere false.

Dette vil være med til at forbedre sikkerheden. Der er forholdsvis mange exploits der kan drage fordel af Type Juggeling i PHP blot ved at bypasse en ikke-standard cookie eller password tjek,

Desværre kommer det til at kræve ret meget af udviklerne der står bag plugins og temaer. I nogle tilfælde kan jeg desværre forestille mig, at det bliver så meget at de kan ende op med at blive lukket ned eller “efterladt”.

Dette kan desværre lede til at mange hjemmesider vil fortsætte med at være driftet på en usikker version af PHP, for at de kan beholde deres nuværende plugins.

Hvilke performance optimeringer kommer vi til at se?

En potentielt spændende funktioner der kommer i PHP 8 er JIT (Just In Time) kompliering. PHP er et fortolket (interpreted) sprog, hvilket betyder at det bliver oversat til maskinkode, når det kører. JIT holder øje med den kode der ofte bruges og vil forsøge at optimere maskinekodeoversættelsen, så det kan genbruges. Det alene kan resultere i en enorm performanceforbedring af specifik funktionalitet i WordPress.

Tilføjelsen af JIT til andre sprog har historisk ledt til en eksplosion af nye applikationer. Eksempelvis har vi set virtuelle maskiner være drevet af JavaScript.. En ting der ville have været utænkeligt i de tidligere dage af internettets levealder.

Den faktiske performanceforbedring af webapplikationer som eksempelvis WordPress, vil dog nok være minimal. Dette skyldes at det kommer til at tage lang tid før en gennemsnitlig WordPress bruger eller udvikler vil høste fordelen af denne nye funktion.

Der er selvfølgelig også mange andre nye features, som gør livet som programmør nemmere, men vi kommer nok ikke til at se dem i WordPress teamer og plugins lige foreløbig. Problemet ligger lidt i at det vil ødelægge den bagudrettede kompatibilitet med tidligere versioner af PHP, som stadig er i brug af utroligt mange WordPress hjemmesider.

Hvor lang tid har udviklere til at opgradere?

Hver version af PHP har en livscyklus på 2 år, hvor det første går med løsning af problemer og det andet år også går med løsning af sikkerhedsproblemer. PHP 7.4 udkom november 2019 og er den endelige version af PHP 7, hvilket betyder at fejl i PHP 7.4 vil blive rettet frem til og med november 2021 og sikkerhedsproblemer vil blive rettet frem til og med november 2022. Derefter når det hvad man kalder EOL altså “end of life”. Det betyder at man betragter november 2022 som være der hvor man laver det hårde snit og alt PHP kode bør være kompatibelt med minimum PHP 8.0. Kode der ikke er kompatibelt med PHP 8.0 på det tidspunkt risikerer at være efterladt på en potentielt sårbar version af PHP.

Konklusion

Overgangen til PHP 8 er en af de største og mest betydningsfule ændringer sproget nogensinde har set. Selvom det helt sikkert er det hele værd i det lange løb, vil WordPress hjemmesider og udviklere gå en lidt hård tid i møde frem til overgangen.

Hvis du ejer en hjemmeside, vil jeg anbefale dig at begynde med at holde øje med hvilke af dine plugins og temaer der bliver opdaterer eller testet for kompatibilitet og måske allerede nu begynde at lave en plan klar for, hvad du skal udskifte dem med.

Er du udvikler, bør du begynde at teste din kode og afhængigheder til PHP 8, hvis du ikke allerede er i gang med at planlægge at forke eller erstatte biblioteker som ikke vil blive opgraderet. Hele WordPress økosystemet har været gennem en svær omstilling over det sidste stykke tid, men heldigvis har det fantastiske open-source fællesskab blot taget i mod og tilpasset sig.

Leave a Reply