Jak se ukázalo, tentokrát na novou verzi PHP byly hostingové společnosti připravené lépe než minule. Spousta z nich už s předstihem připravila PHP 8.0 RC verze (relase candidate). Přitom slíbili, že PHP 8.0 stable nasadí co nejdříve. Rozhodl jsem se proto otestovat u 11 webhostingů z Ultimátního testu vyzkoušet jak to je doopravdy. V tomto článku se podíváme také na pár zajímavostí, které nové PHP 8.0 přináší.
Přístup hostingů
V roce 2015 jsem dělal přehled, jak hostingy postupně nasazovali PHP 7.0, viz článek Webhosting s podporou PHP 7. Popravdě situace v té době nebyla moc dobrá. Nasazovalo se pomalu a velice opatrně. Často bylo nutné napsat na podporu, aby vám to přepli ručně. Přitom tlak ze strany uživatelů byl poměrně velký. Mohly za to redakční systémy, které už byly na nové verze připravené a hlavně PHP 7.0 měla být o dost rychlejší.
Teď je situace odlišná. Hostingy se předhání kdo nasadí dříve dokonce RC verze, které nejsou určeny pro komernční provoz. Je cítit tlak vedení/PR. Aktuální situaci přesně vystihl Wladass ve svém článku Jak jsou na tom české hostingy s PHP 8?, který postavil na dotazníku ohledně zavádění PHP 8.0:
“Je dobré, že se prostředí českých hostingů stalo vysoce konkurenční a při výběru hostingu hraje roli každá maličkost a že se společnosti musí snažit, aby si nové zákazníky získali na svou stranu. Třeba i tím, že „jdou s dobou“ a pro své zákazníky nasazují nové verze PHP ihned, jak je to možné.”
V jeho článku najdete největší české společnosti a jejich přístup k PHP 8.0.
Tak a teď se pojďme podívat na novinky v PHP 8.0.
JIT (just in time compiler)
JIT (Just In Time) je nový kompiler v PHP 8.0, který má zrychlit běh skriptů. V podstatě jde o to, že PHP je interpretovaný programovací jazyk, na rozdíl od známých programovacích jazyků jako C++ anebo Java, které jsou jednorázově kompilované, je PHP vždy po spuštění přeložen do strojového kódu, kterému procesor rozumí a umí jej zpracovat. JIT částí kódu při spuštění kompiluje a nechává uložené v paměři pro další využití.
Zní to perfektně. Osobně jsem se však na to ještě do detailů moc nedíval, takže tady o tom psát nechci, dokud si to nenastuduji a pořádně nevyzkouším. Co se týká benchmarků dostupných na interentu, tak některé ukazují velmi vlažné zrychlení, ale viděl jsem i výstupy ukazující zrychlení v desítkách procent oproti 7.4. Samozřejmě největší otázkou je, o kolik to dokáže zrychlit WordPress? A na tu prozatím odpovědět neumím…
V každém případě WordPress 5.6 zatím nemá plnou podporu PHP 8.0. Vývojáří WordPress označují 5.6 jako “beta compatible with PHP 8”. Vzhledem k množství změn a odlišného chování PHP 8.0 vs PHP 7.4, bych s přepnutím u WordPress opravdu počkal.
Předělané hlášení varování a chyb
Jiné chování operátoru @
Pokud požíváte operátor @ pro potlačení hlášení chyb, tak dd PHP 8 se mění jeho chování a hlásí fatal error. Řešením je:
display_errors=Off
Defaultně se chyby hlásí na úrovni E_ALL
Pokud ve svých skriptech nepoužíváte error_reporting, možná vás čeká po přepnutí na PHP 8.0 překvapení v podobě výpisu varování. Mění se totiž základní nastavení hlášení chyb na úroveň E_ALL. Bude hlášeno všechno s výjimkou E_NOTICE (poznámky) a E_DEPRECATED (varování před končíčí životnosti).
Defaultní hlášení chyb PDO je vypnuté
Pro komunikaci s databází jsme asi všichni u PHP 7 přešli na PDO. Pozor u PHP 8.0 se vypíná hlášení všech chyb u PDO. Předpokládám že to je z důvodu bezpečnosti. Chyby na úrovni Error a Warning si tak musíte odchytávat ve skriptech.
Zpřísnění některých chyb
Osobně se snažím držet skripty bez jakýchkoliv chyb a varování. U některých “převzatých” řešeních, člověk ale občas poleví a říká si že až bude mít čas, tak si to upraví. Jak tak koukám do tabulky co se mění, tak s PHP 8.0 ten čas opravdu nastal.
Co | PHP8 | PHP7 |
Undefined variable | Error | Notice |
Undefined array index | Warning | Notice |
Division by zero | Error | Warning |
Attempt to increment/decrement property ‘%s’ of non-object | Error | Warning |
Attempt to modify property ‘%s’ of non-object | Error | Warning |
Attempt to assign property ‘%s’ of non-object | Error | Warning |
Creating default object from empty value | Error | Warning |
Trying to get property ‘%s’ of non-object | Warning | Notice |
Undefined property %s $%s | Warning | Notice |
Cannot add element to the array as the next element is already occupied | Error | Warning |
Cannot unset offset in a non-array variable | Error | Warning |
Cannot use a scalar value as an array | Error | Warning |
Only arrays and Traversables can be unpacked | Error | Warning |
Invalid argument supplied for foreach() | Error | Warning |
Illegal offset type | Error | Warning |
Illegal offset type in isset or empty | Error | Warning |
Illegal offset type in unset | Error | Warning |
Array to string conversion | Warning | Notice |
Resource ID#%d used as offset, casting to integer (%d) | Warning | Notice |
String offset cast occurred | Warning | Notice |
Uninitialized string offset %d | Warning | Notice |
Cannot assign an empty string to a string offset | Error | Warning |
Supplied resource is not a valid stream resource | Error | Warning |
Jiné chování ==
Přiznám se, že tohle mi kompletně uniklo v PHP 7 a i předchozích verzích. Za určitých okolností může vrátit 0 == “foo” TRUE. PHP 8.0 tohle zpřísňuje.
Porovnání | PHP8 | PHP7 |
0 == "0" |
true
|
true
|
0 == "0.0" |
true
|
true
|
0 == "foo"
|
false
|
true
|
0 == ""
|
false
|
true
|
42 == " 42" |
true
|
true
|
42 == "42 "
|
false
|
true
|
42 == "42foo"
|
false
|
true
|
42 == "abc42" |
false
|
false
|
Novinky v PHP 8.0 které mě zaujaly
PHP 8.0 toho přináší opravdu hodně. Mě osobně zaujaly následující novinky, které mi ulehčí práci u mých projektů anebo v nich vidím další potenciál.
Pojmenované parametry (Named Arguments)
V PHP 8.0 můžete při volání funkce přímo volat jednotlivé deklarované parametry. To jednak zjednoduší práci s funkcemi, kde jich je hodně a část volitelná, a také udělá kód přehlednějším.
function muj_pracovni_den(string $zacatek, string $konec, ?string $svacina = null, ?string $obed = null) { ... } muj_pracovni_den( zacatek: 'Zpoždění 10 minut', konec: 'Přesčas 20 minut', obed: '15 minut max', );
Match
match je takový vylepšený switch, který nepotřebuje break.
$result = match($input) { 0 => "hello", '1', '2', '3' => "world", };
str_contains()
Takhle funkce mi fakt chyběla. Pro hledání řetězce v řetězci už nemusíme používat strpos(). Odteď je vše jednodušší:
if (str_contains('dlouhy retezec kde je tajne slovo', 'tajne')) { ... }
str_starts_with() a str_ends_with()
Občas potřebujte rychle zjistit zdali se na začátku anebo na konci řetězce nachází pár písmen a tyto dvě nové funkci vám s tím pomohou.
str_starts_with('www.domena.cz', 'www.'); // true str_ends_with('www.domena.cz', '.cz'); // true
Poslední čárka (trailing commas)
Tato malá vychytávka v PHP 8.0 vám umožní dát do funkce na konci čárku.
function ovoce(
string $druh,
string $barva,
string $stav,
string $sezona, // <-- A tohle se od PHP 8.0 smí :)
);
Ultimátní test webhostingů – stav PHP 8.0
Test je tentorkát rozdělen do dvou částí. V první části najdete tabulku se stavem PHP 8.0 k 26.11.2020, 3.12.2020 (za týden) a 26.12.2020 (za měsíc). PHP se pokusím přepnout ručně v administraci pokud to hosting dovoluje. V druhé části jsou mé poznámky ke snaze přepnout si verzi PHP se subjektivním hodnocením mých (ne)schopností – jednoduché (na pár kliků intuitivně), složitější (s menším zásekem), těžké (s více záseky anebo po použití nápovědy).
Kdo má a jakou verzi PHP 8.0
Kde | Tarif | 26.11.2020 | 4.12.2020 | 26.12.2020 |
WEDOS | NoLimit | 8.0.0 | 8.0.0 | 8.0.0 |
FORPSI | Webhosting Easy | NE | NE | NE |
ACTIVE 24 | WordPress hosting | NE | NE | NE |
Web4U | Basic | NE | NE | NE |
Savana | SAVANA 101 | NE | NE | NE |
ONEbit | Start | 8.0.0 | 8.0.0 | 8.0.0 |
Gigaserver | Mini | NE | 8.0.0 | 8.0.0 |
Station | Little | 8.0.0RC5 | 8.0.0RC5 | 8.0.0RC5 |
Nethost | Easy+ | NE | 8.0.0 | 8.0.0 |
TELE3 | Na míru | NE | 8.0.0 | 8.0.0 |
EBOLA | Basic | NE | NE | NE |
- Verzi PHP beru ze Stav webu ve WordPress.
Jak bylo těžké verzi přepnout
44 minut mi zabralo změnit verzi PHP u 11 webhostingů.
Wedos – jednoduché
V administraci klikám na Hostingové služby – Webhosting. Ze Seznamu vybírám testovací hosting. V levém menu je Konfigurace PHP. Z drop down menu volím PHP 8.0 a klikám na upravit.
Forpsi – těžké
Po přihlášení klikám na wenhosting, vybírám ze seznamu ten testovací a jsem v koncích. Nikde žádné nastavení (web)serveru/PHP nevidím. Rozpomínám se, že u Forpsi se mění verze PHP ne v zákaznické administraci ale speciálním rozhraní, URL si Googlím a zjišťuji přes návod – cp.forpsi.com. Tam pak už je Nastavení PHP. Poslední verze je PHP 7.4. Hmm měl jsem tam 7.3, tak alespoň přenastavím. Fakt nevím proč ze zákaznické administrace nemají přímý odkaz na změnu PHP klidně i v tom druhém rozhraní. Proč jinak chodit do zákaznické administrace?
Active 24 – jednoduché
Po přihlášení jste přesměrování na podstránku Přehled služeb, kde jen kliknete na službu hostingu a dostanete se na Přehled serverů, kde odscrollujete na verzi PHP a PHP 8 tam zatím není. Dokonce tam není ani PHP 7.4, musíte zůstat u PHP 7.3 :/
Web4U – jednoduché
Po přihlášení vidím seznam služeb. Klikám na administrace u webhostingu. Hned vidím Verze PHP, ale k dispozici je jen 7.3. Ještě je tam informace, že se pro jinou verzi musí kontaktovat helpdesk. No nic zkusíme i to.
Aktualizace 4.12.2020: Kontaktoval jsem zákaznickou podporu a nabídli mi přepnutí verze na PHP 7.4, čehož jsem využil.
Savana – jednoduché
U Savana se mi nedařilo přihlásit. Pak jsem zkusil kouknout do emailu jestli mi něco třeba nepsali a oni 8.10.2020 generovali PIN k heslu. Hmm podivné, ale chápu. Tak ale zpět k změně PHP. Na první stránce nic na první pohled nevypadá že by vedlo na změnu PHP. Tak to zkusím proklikat. Začínám u Nastavení a hned trefa. Hmm tak jen 7.3 a v beta verzi :/
OneBit – těžké
Tady se na moc věcí klikat nedá, tak zkusím záložku služby a hned vidím PHP, což je super a v submenu vybírám Volitelná nastavení PHP a je tam:
“Pro přístup do této sekce musíte mít nastaven stupeň uživatelského oprávnění Expert.”
Ach jo. Tak jdu si nastavit expert. Zbytečné zdržení. Hmm tak experta nastaveného mám. Zkusím to odkliknout, třeba se tam něco nepropsalo. Dobrý tak nezabralo, stále nejde. Přepnu tedy na Normal a znovu na Expert. Ok musel jsem to potvrdit. Hmm tak stále nic. Pořád tam vidím, že musím být expert.
Zkouším to proklikat a zjistím, že verzi PHP naštěstí mohu nastavit v záložce PHP info a je tam 8.0.
Gigaserver – jednoduché
Po příhlášení jsem ve “fakturační administraci”. Je nutné se přepnout do ovládání služby (v menu je administrace). Tam hned vidím Verze PHP v levém menu. K dispozci je ale jen 7.4 :/
Aktualizace 4.12.2020: Dnes už PHP 8.0 na výběr byla 🙂
Station – jednoduché
Po přihlášení je třeba kliknout na webhosting a pak přehled webhostingů. Pak zvolit u webhostingu nastavení a znovu nastavení. Hned nahoře je volba PHP a 8.0 mají.
Nethost – nelze
Po přihlášení na úvodní stránce je nutné kliknout na klientou administraci, kde je nutné se znovu přihlásit. A dál jsem ztracený. Moji službu nikde nevidím, jen faktury. Hmm zkusím trochu Googlit a zjistím, že už jsem to jendou řešil a je nutné napsat na podporu.
Aktualizace 4.12.2020: Kontaktoval jsem zákaznickou podporu a tam mi řekli, že jakmile budou mít PHP 8.0 tak mi dají vědět. V poledne 27.12.2020 mi přišel email, že jí mají k dispozici a jestli jí chci přepnout.
Tele3 – jednoduché
Po přihlášení k administraci klikám na webhosting a pak ikonku ozubeného kolečka. V menu je Nastavení PHP a tam je volba verze. K dispozcii je však jen verze 7.4.
Aktualizace 4.12.2020: Dnes už PHP 8.0 na výběr byla 🙂
eBola – jednoduché
V administraci na první pohled nevím kam kliknout. Zkouším Další nástroje a rozvine se mi menu, kde je Nastavení WWW a PHP. Verze 8.0 tam však není.
Závěr
Noo tak celkem zklamání, myslel jsem že jich bude o pár víc. Samotnému, jen přes administraci, se mi podařilo zvolit PHP 8.0 v den vydání jen u 3 hostingů z 11. Uvidíme jak to bude za týden.
Btw. na všech WordPress ve verzi 5.3.3 jede, ale pro jistotu jsem vypnul pluginy 🙂
- https://wiki.php.net/rfc#php_80
- https://stitcher.io/blog/new-in-php-8
- https://blog.nette.org/cs/php-8-0-co-je-noveho-1-4
- Exon hosting slevové kupóny - SlevyNaHosting.cz
Super shrnutí a test. Jako vždy. Osobně bych byl tedy kritičtější. Nevím co jsi čekal ty, ale já že alespoň polovina bude mít PHP8.
Je vidět že v PHP děláš jen jednodušší věcí. To nemyslím nijak ve zlém. Píšeš o funkcích, ale dotýká se to hlavně OOP.
Čekal jsem na tento tvůj článek celkem dlouho. Nějak jsi slevil na kritice. Četl jsem už dříve i ten odkazovaný a z něj to vypadalo, že PHP 8 budou mít snad všude.
Další super test. Jen v tom testování pokračuj.
Palec nahoru jak jsi to pěkně spojil s wladassem. On to udělal hezký průzkum jak to vidí marketingová oddělení a ty jsi ukázal tvrdou realitu.
A to bylo všude keců jak mají k dispozici RC verze na odzkoušení a hned budou nasazovat.
Nevidím tam Blueboard
Zdravím, BlueBoard nebyl 28.05.2019 zařazen do Ultimátního Testu Webhostingů. Důvodem je že buď neměli v té době webhostingový tarif s cenou do 50 CZK/měsíc a zároveň museli hostovat alespoň 10K .cz domén.
Stejně je to sranda, když jsem s PHP před 10 lety začínal, hostingy se všelijak vymlouvaly, jak ještě furt nemůžou už X let starou verzi nasadit, protože s ní nemaj zkušenosti a další trapný výmluvy. Pak se to konečně roztrhlo a teď se nestačí předhánět.
Nevím jestli to má smysl, ale dostal jsem doporučení na wp-hosting.cz a protože hledám informace o vhodném hostingu, tak hledám informace. Máte prosím někdo zkušenosti? díky za info
Proc taky nepridat mezinarodni?
Bluehost
A2Hosting
Site ground
GoDaddy
InMotion Hosting
HostForWeb
Hostgator…
Zdravím,
protože pokud člověk nepotřebuje servery v zahraničí (blíže k zákazníkům) tak to nemá cenu. Navíc levné české sdílené webhostingy jsou na velmi vysoké úrovni v porovnání se zahraničními.