2016.06.14 19:43
Andrei

Nem is olyan vészes a PHP 7.0 és MySQL 5.7 migrálás


Amikor ezt mini szervert összeraktam, akkor próbáltam a legújabb verziókat felpakolni mindenből (PHP 7.0 és MySQL 5.7). Ennek pedig megvannak a maga hátulütői, de úgy gondolom, hogy végső soron megéri átállni


A tesztalanyom természetesen ez a nem olyan régi honlapmotor lett, amely tulajdonképpen egy szerkesztőségi keretrendszer. Ugyan én itt most blogolásra használom, de ez volt kéznél...

 

Jó dolog a PHP 7.0, érteeeem?

 

Sokat olvasgattam arról, hogy a PHP 7.0 mennyivel optimalizáltabb az elődjeinél. Van amit simán benyel, van amiért keményen odaszól. Ha a PHP 5.x tengelyről szemléled a világot, akkor bizony lesz átírni valód ahhoz, hogy a kód hibamentesen fusson.  A PHP 5.6-os kódjaid migrálásról itt olvashatsz. Nem olyan vészes mint elsőre tűnik. Ha valamennyire modern szemlélettel kódoltál eddig is, illetve nem procedurálisan, akkor nem fog rámenni az életed, mire migrálod a saját keretrendszered, vagy másét.

 

Nekem nagy szerencsém volt ezzel a kóddal, mert egyedül a PDO hányta össze kicsit magát az insert-eknél. Azt pedig negyed óra alatt rendbe lehetett tenni. De erről majd a DB-nél.

 

Amiért vártam már, hogy PHP 7.0 legyen, az többek között a tömbösített define() és ugyancsak tömböt is kaphat a session_start(). Ez utóbbi annyiból jó, hogy pl nem kell a cache_limiter-t külön meghívni. Ami még érdekes, hogy a csoportosan meghívható use a namespace-ek alatt.

 

use /Model/Db/SQL as SQL

use /Model/Db/Store as Store

 

Ne felejtsük el, hogy a névtér bizony beég ezért - ha hülyén néz ki, ha nem, de - fel kell oldalni, hacsak nem direktben hívjuk meg az adott osztályban. Az én esetemben az SQL az aminek a neve mondja, a Store pedig egy cache-szerű átmeneti tár. A fenti use tehár erre fog változni (nem kötelező):

 

use /Model/Db{SQL as SQL, Store as Store}

 

Emellett az unserialize nem lesz rossz így szűrőzhetően, de még nem látom hol fogom alkalmazni. Az új spaceship operátor meg mókásan néz ki.

 

mysql_* helyett PDO vagy mysqli_*

 

Itt már ne is próbáljunk meg nagyon a régi mysql_* függvényekkel operálni. A mysql kiterjesztést ugyanis egy az egyben kivették a PHP 7-ből. Aki azt szokta meg, az egyszerűen átállhat a mysqli_* függvényekre. Nem véletlen a hasonlóság, ráadásul a mysqli is használható procedurálisan. Ahol nagy a kódbázis, ott így gyorsabb az átállás. Én speciel a PDO objektum orientáltságát és sokrétűségét preferálom. Aki több fajta adatbázissal akar dolgozni, nem csak mysql-el, illete objektum orientáltan tenné ezt, a mindenképpen válassza a PDO-t. Persze a mysqli is támogatja az OOP-t, de csak MySQL-t lehet vele hajtani. Ezzel szemben a PDO 12 különböző driverrel rendelkezik (pl PostgresQL, MS SQL, Oracle, stb).

 

Ha most váltasz mysql-ről mysqli-re vagy PDO-ra, akkor az egyik nagy különbség  a változók feladása és előszűrése (prepare), illetve az összefűzhető lekérdezések egyszeri elsütése, no meg a hiba esetén az adott lekérdezés tömb visszacsinálhatósága.

 

A MySQL 5.7 maga a menőség

 

Aki elvesztette az InnoDB miatt a fulltext search-öt az most visszakapta (bár azt hiszem, hogy ez már az 5.6-os verzióban is létezett). Emellett gyorsult rendesen - volt aki hatszoros sebességet mért az 5.6-hoz képest. És végre natívan támogatja a JSON-t. A MySQL újdonságokról itt olvashatsz

 

A MySQL igénytelen, de legyen alapértelmezett mező érték

 

Nekem a PDO többek között az alapértelmezés nélküli mezőkre adott üres insert-eknél adta fel a harcot. Eddig ugye nem szólt, hanem lefutott simán. Például dátum mezőt megpróbált feltölteni egy 0000-00-00 értékkel. Ami szerinte nem jó dolog és mindjárt 22007-es hibakóddal elszált. Az insert-ek meg nem futottak le. Ha már megvan a PDO objektumod, akkor a hibaüzebeteket szépen kiirathatod akkor is, ha alapértelmezésben a catch(PDOException)-öd üres.

 

SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 

Én is innnen láttam, hogy valami nem gömbölyű. Hezitáltam egy darabig, hogy az alapértelmezett mező értékek megadása, vagy a kód átírása-e a gazdaságosabb. Végül az adatbázison mentem végig. Így nálam a migrálás összesen 15 percig tartott kávéval együtt.

 

Összességében jó döntés migrálni

 

A PHP 5.6 + MySQL 5.4 kombóhoz képest ugyanaz a kód gyorsabban fut le. Kevesebb a slow query és a top-ban sem látok kiugró értékeket a terhelés tekintetében.  Amúgy meg az ember fiának alapból jó érzés, hogy a kódja meg lett feleltetve a legújabb verzióknak. Sőt! Még visszafelé is kompatibilis maradt.  Vagyis PHP 5x - 7.0 és MySQL 5.3 - 5.7 tartományban, azaz a szerverek nagyrészén elfut minden gond nélkül. És akkor sem dobja hanyatt magát, ha a webmester időközben csendben upgrade-eli a szerverünket.  




A honlap sütiket használ a böngészés támogatására és egyes funkciók elérésére. A honlap további használatával hozzájárul a sütik használatához. A sütik kezeléséről további információt az Adatvédelem menüpont alatt találsz.