Přeskočit na obsah

Web nefunguje? Volejte Web nefunguje? +420 721 589 155 nebo nám napište Napište nám

Případová studie

Převod staršího webu na PHP 8.5: oprava šablony z roku 2015 a galerií

Po kritické opravě PHP přepnul hosting web firmy PEKSTAV z PHP 7.4 na 8.5 a stránky začaly hlásit chybu 500. Upravili jsme šablonu z roku 2015, opravili galerie referencí a mobilní verzi. Web vypadá jako dřív a běží na verzi PHP, která dostává bezpečnostní opravy.

Tomáš Cirkl Publikováno 5 min čtení

Převod webu z PHP 7.4 na 8.5: všech 9 widgetů šablony přepsaných pro PHP 8, nastavení šablony v administraci bez funkce, kterou PHP 8 odstranilo, galerie referencí znovu na 35 stránkách a mobilní verze s opraveným menu
Obsah článku (7 kapitol)

PEKSTAV zatepluje a revitalizuje bytové i rodinné domy na jižní Moravě. Firemní web s referencemi, ceníkem a blogem běží na WordPressu a na šabloně z roku 2015, kterou už nikdo nevyvíjí.

Po kritické opravě PHP v říjnu 2026 přepnul hosting web z PHP 7.4 na PHP 8.5 a stránky začaly hlásit chybu 500. Šablonu jsme upravili pro PHP 8.5, opravili galerie referencí, které se nezobrazovaly, a doladili mobilní verzi. Web vypadá stejně jako dřív a běží na verzi PHP, která dostává bezpečnostní opravy.

Co se stalo

Projekt PHP 21. října 2026 vydal mimořádnou opravu dvou kritických chyb, přes které může útočník bez přihlášení spustit na serveru vlastní kód. Opravu dostaly jen verze PHP 8.2 a novější. Víc o ní píšeme v článku Kritická oprava PHP.

Web pekstav.cz běžel na PHP 7.4, které bezpečnostní opravy nedostává od listopadu 2022. Ten den odpoledne jsme majiteli napsali, že je potřeba verzi navýšit a že se stará šablona při přechodu nejspíš rozbije. O dvě hodiny později přepnul hosting web na PHP 8.5.

Návštěvníci pak viděli jen stránky, které měl plugin WP Rocket uložené v mezipaměti. Ostatní stránky i administrace hlásily chybu 500. Do chybového logu PHP (záznamu chyb na serveru) se za dva dny zapsalo přes 800 kritických chyb a přes 5 000 varování.

Oprava šablony místo nového webu

Majitel potřeboval, aby web znovu fungoval ve stejné podobě, s referencemi, ceníkem i formuláři. Nová šablona nebo přestavba webu v tu chvíli na programu nebyla.

Vrátit web na PHP 7.4 by ho rozběhlo jen na chvíli a nechalo by ho bez bezpečnostních oprav, kvůli kterým se verze měnila. Proto jsme upravili stávající šablonu tak, aby na PHP 8.5 fungovala. Na PHP 8.5 jsme web nechali, bezpečnostní opravy dostává do konce roku 2029.

Přístup k hostingu jsme dostali 23. října a ještě ten den web znovu běžel. Původní soubory šablony a pluginů jsme si před úpravami uložili a postupovali podle chybového logu.

Co na PHP 8.5 nefungovalo

Widgety šablony

Šablona má 9 vlastních widgetů, třeba video, ikony sociálních sítí, reklamní bannery nebo nejnovější příspěvky z rubriky. Byly napsané ve stylu PHP 4: funkce, která widget vytváří (konstruktor), se jmenovala stejně jako jeho třída a volala starou funkci WP_Widget(). WordPress tenhle zápis označil za zastaralý už v roce 2015 ve verzi 4.3 a PHP 8 ho za konstruktor nepovažuje vůbec.

WordPress proto widget vytvořil bez povinných údajů a PHP skončilo chybou ArgumentCountError, kvůli které se stránka nenačetla. Konstruktory jsme přepsali do zápisu, se kterým počítá současné PHP i WordPress:

// Původně: konstruktor ve stylu PHP 4, PHP 8 ho jako konstruktor nespustí
function mm_Video_Widget() {
	// …
	$this->WP_Widget( 'mm_video_widget', __( 'Theme4all Video Widget', 'framework' ), $widget_ops, $control_ops );
}

// Teď
function __construct() {
	// …
	parent::__construct( 'mm_video_widget', __( 'Theme4all Video Widget', 'framework' ), $widget_ops, $control_ops );
}

Stejnou úpravu jsme udělali u všech 9 widgetů. Jejich nastavení ani obsah se nezměnily.

Nastavení šablony v administraci

Stránka s nastavením šablony používala funkci create_function, kterou PHP 8 odstranilo. Na 5 místech jsme ji nahradili funkcí __return_null, kterou má WordPress pro stejný účel.

Plugin pro galerie

Galerie na webu dělá plugin „Galleries by Angie Makes“, který se už nevyvíjí. Na PHP 8.5 zapisoval při každém načtení stránky do logu varování, za dva dny přes 5 000 řádků. Doplnili jsme do něj kontrolu, která neplatné hodnoty přeskočí.

Neviditelné galerie referencí

Galerie s fotkami staveb se nezobrazovaly na 35 stránkách, včetně „Vybraných referencí“ na úvodní stránce. Šablona místo knihovny jQuery z WordPressu načítala verzi 1.8.0 z roku 2012. Galerie potřebují ještě knihovnu imagesLoaded, kterou dodává WordPress, a ta se starou jQuery nepočítá. Skript galerie skončil chybou a fotky zůstaly skryté.

Do šablony jsme doplnili krátký skript, díky kterému umí imagesLoaded pracovat i se starší jQuery (procházení prvků přes Symbol.iterator). Galerie se zase zobrazují.

Mobilní verze

Po opravách jsme na šířce telefonu (375 px) prošli všech 67 stránek a příspěvků z mapy webu a hledali prvky širší než obrazovka. Upravili jsme:

  • Menu: rozbalovací menu z Bootstrapu 2.2 se po klepnutí otevřelo a hned zase zavřelo. Teď na klepnutí reaguje jen jednou.
  • Obrázky s popiskem: měly z editoru pevnou šířku a přetékaly obrazovku, teď se zmenší.
  • Dlouhé odkazy v textu: zalomí se, takže stránku nerozšiřují.
  • Tabulky: tabulky z pluginu TablePress se na mobilu posouvají do strany.
  • Odznak reCAPTCHA: ochrana formulářů proti spamu zakrývala v rohu obrazovky obsah. Odznak jsme skryli a pod formuláře doplnili upozornění, které Google v takovém případě vyžaduje.

Jak jsme web předali

Po nahrání oprav jsme vymazali mezipaměť WP Rocket a prošli úvodní stránku, reference, ceník, kontakt i blog na počítači i na mobilu. Majitel dostal krátkou zprávu, že web běží na PHP 8.5 a šablona je upravená.

Kolik stojí aktualizace PHP

V ceně aktualizace PHP je kontrola webu a chybového logu, záloha před změnou, aktualizace pluginů a šablony, přepnutí verze PHP, oprava chyb, které nová verze ukáže, test webu a krátké shrnutí, co jsme změnili. Platíte odpracovaný čas a kolik ho bude, záleží hlavně na tom, jak dlouho se web neaktualizoval a jestli má šablonu nebo kód na míru. Předem pošleme odhad a pustíme se do práce po vašem souhlasu. Ceny jsou na stránce Aktualizace PHP.

Když váš web běží na PHP 8.1 nebo starším, nebo se po přepnutí PHP přestal načítat, podíváme se na něj. Projdeme šablonu, pluginy a chybový log, opravíme, co nová verze rozbila, a web vyzkoušíme na počítači i na mobilu.

Autor

Tomáš Cirkl

Baví mě Internet a zvláště pak redakční systém WordPress. Jsem pravidelným účastníkem a přednášejícím na WordCamp Praha a WordPress konferencích.

1 035 článků Všechny články autora

Komentáře

Zatím tu nikdo nekomentoval. Napište první komentář.

Přidat komentář

E-mail nezveřejníme. Povinná pole jsou označena hvězdičkou.

Jak zacházíme s údaji z komentářů, popisují zásady ochrany osobních údajů.