Hanterar graciöst PHP-versionsstöd i WordPress
Så länge jag har arbetat med WordPress har samtalet (och jag använder den här termen löst) kring vilka versioner av PHP som det borde eller inte borde stödja pågått.
- Det korta med det är att vissa ser det som ett så stort och populärt program som WordPress som driver så mycket av de CMS-baserade webbplatserna borde kunna använda sin inflytande för att främja mer innovativa lösningar.
- Andra ser att folk inte ofta uppgraderar, är på budgetvärdar eller helt enkelt inte bryr sig (låt mindre bry sig om att veta) vilken version av PHP de kör.
Dessa två punkter skulle kunna ge ett inlägg och kommentarer i dagar, men jag är inte intresserad av det. Eftersom mitt team och jag sysslar med att bygga anpassade lösningar för andra, har vi flexibiliteten att inventera var användarna är värd för sin webbplats eller applikation, distribuera den och utnyttja funktionerna i PHP som erbjuds av deras värdar.
Det finns dock tillfällen då jag har stött på en del personer som kör versioner av PHP så låga som 5.3.
Så vad då?
Först nämner WordPress kravsidan specifikt detta:
Om du befinner dig i en äldre miljö där du bara har äldre PHP- eller MySQL-versioner, fungerar WordPress även med PHP 5.2.4+ och MySQL 5.0+, men dessa versioner har nått officiellt End Of Life.
Så, för att vara tydlig, det körs på äldre versioner av PHP, men som utvecklare kommer vi att vara kraftigt begränsade av vad vi kan göra med språket. Och, som sidan nämner, bör säkerhetskonsekvenserna och "slutet på livet"-stödet för versionen av språket inte ignoreras.
När jag arbetar med ett plugin eller något som kommer att köras på WordPress och jag vet att det kommer att behöva köras på en mängd olika värdar, ger jag ett absolut minimum av support. Detta vanligtvis PHP 5.6.20.
Om miljön som projektet kommer att köras i inte stödjer det, så kommer jag att meddela detta och förhindra att projektet körs. I samband med ett plugin är det troligtvis bäst att ansluta till register_activation_hook-funktionen.
För att göra det kan du skriva något så här:
<?php
register_activation_hook(__FILE__, __NAMESPACE__. 'acme_activate');
/**
* Verifies that the user is running the proper version of WordPress for the
* plugin to execute; otherwise, displays an error message and prevents the
* plugin from being activated.
*/
function acme_activate()
{
if (version_compare(PHP_VERSION, '5.6.20', '<')) {
wp_die(
sprintf(
'Acme requires PHP 5.6.20 or higher.
Your WordPress site is using PHP %s. Please contact your hosting
provider and ask that they upgrade the version of PHP on which
your installation of WordPress is running. Click back in your
browser to your WordPress dashboard.',
PHP_VERSION) );
}
}
Visst, det är enkelt, och skärmen använder standard wp_die-styling, men det fungerar också. Om du har mer erfarenhet eller tid, är det också möjligt att köra kontrollerna lite annorlunda och ge din egen styling.
Syftet med det här inlägget är inte hur man gör det. Istället är punkterna:
- bestämma vilken version av PHP du kommer att stödja,
- jämför versionen av PHP som körs på servern,
- rendera ett meddelande om versionen av PHP på servern är lägre än vad du kommer att stödja,
- graciöst gå ut.
Hur du slutar rendera detta är upp till dig, men kärnan i koden ovan borde räcka för att du ska komma igång.
Ytterligare anmärkningar
Och om du verkligen vill göra en djupdykning om hantering av strängar i PHP, rekommenderar jag Carls inlägg om hantering av strängar i PHP.