PHP versiooni testimine
Kui mõnes sinu virtuaalserveris on kasutusel aegunud PHP versioone, tekib selle kohta vastav hoiatus Minu Zones teenuste ülevaate lehele.
Klõpsates lehekülje päises olevale nupule Vaata
pääsed ülevaate lehele, kus kuvatakse serveris olevaid aegunud PHP hoste (pea- ja alamdomeenid)
Kuna PHP versioonivahetus võib tekitada veebilehele veateateid ja versiooni vahetus võtab kuni 3 minutit siis on soovitatav enne muudatust lehekülje toimivust testida.
Testimiseks klõpsa nimistus soovitud aadressi peale:
Peale seda avaneb testitav veebilehekülg, kus päises on valik erinevate PHP versioonidega. Nende vahel valides näed tulemust erinevate PHP versioonidega. Näiteks:
PHP 5.6:
PHP 8.1:
Kaasaegsete veebirakenduste nagu WordPress puhul soovitame proovida üleminekut PHP versioonile 8.0 või 8.1 tehes eelnevalt WP ja pluginate-teemade uuenduse.
Uuendamata veebirakenduste puhul võib ülemineks PHP 8.x versioonile olla keeruline, sest erinevused 5.6 ja 7.x vahel on suured.
Sagedasemad vead versioonivahetusel
Täpitähtede asemel küsimärgid
PHP 5.6 lisab lehtedele vaikimisi UTF-8 tähekodeeringu kasutamisele viitava päise, vanemaid kodeeringuid kasutavatel lehtedel tuleb see eemaldada ja jätta kodeeringu tuvastamine brauserile.
Lihtsaim viis selleks on lisada veebi juurkataloogi htdocs
fail .user.ini
seadistusega:
default_charset = ''
Veateade Fatal error […]
Veebilehte ei kuvata ning lehe alguses on teade, näiteks:
Fatal error: Call to undefined function session_register() in [...] Fatal error: Call to undefined function sqlite_open() in [...] Fatal error: Call to undefined function wp_script_add_data() in [...] Fatal error: Call-time pass-by-reference has been removed in [...]
Tegemist pöördumisega funktsiooni poole, mis on PHP keelest eemaldatud või mille registreerimine mõne versiooniuuendusest tingitud probleemi tõttu ei õnnestu.
Erandiks Call-time pass-by-reference has been removed
mis on seotud muutusega PHP süntaksis.
Rakenduse viimiseks uuemale PHP versioonile on vajalik tuvastada vea täpne põhjus ja parandada koodi.
Veateade Fatal error: Incompatible file format
Veebilehte ei kuvata ning lehe alguses on veateade:
Fatal error: Incompatible file format: The encoded file has format major ID 1, whereas the Loader expects 7 in /data[...]/htdocs/index.php on line 0
Võib kohata Zend Guardi abil krüptitud / litsentsitud rakenduste, ennekõike Sauruse puhul. PHP versiooni vahetamine versioonile 5.6 on võimalik ainult rakenduse koodi väljavahetamise ja uuendamisega (Sauruse tasulist tuge pakub viimasena Bonefarm). Veebi võib teisendada staatiliseks HTMLiks, või viia üle tänapäevasele sisuhaldusele nt WordPressile.
Veateade Warning: Cannot modify header information […]
Seda hoiatust kuvatakse, kui lehe genereerimisel käigus on tekkinud teisi hoiatusi või veateateid, mille väljastamise tõttu ei ole võimalik saata HTTP päringu päiseid:
Warning: Cannot modify header information - headers already sent by (output started at [...]wp-db.php:57) in [...]
Ei oma iseseisvat tähendus, võib ignoreerida.
Veateade Warning […]
Veebilehe avamisel kuvatakse lehe alguses või mõnes komponendis teade:
Warning: Creating default object from empty value in [...] Warning: file_put_contents(): Filename cannot be empty in [...] Warning: get_class() expects parameter 1 to be object, string given in [...] Warning: getimagesize(): Filename cannot be empty in [...] Warning: Illegal string offset 'face' in [...] Warning: Invalid argument supplied for foreach() in [...]
Mõne funktsiooni parameetri tüüp või väärtus ei vasta oodatule, miska mõni veebirakenduse funktsionaalsus võib toimida plaanitust erinevalt (enamasti lihtsalt soovitud sisu väljastamata jättes).
Kui funktsionaalsus ei ole oluline võib ignoreerida ja keelata Warning
teadete väljastamise, lisades veebi juurkataloogi htdocs
fail .user.ini
seadistusega:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED & ~E_WARNING
Zone vaikeseadistus on: error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
Veateade Deprecated […]
Veebilehe avamisel kuvatakse lehe alguses või mõnes komponendis teade:
Deprecated: Assigning the return value of new by reference is deprecated in [...] Deprecated: Function set_magic_quotes_runtime() is deprecated in [...] Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in [...] Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in [...]
Viidatud funktsioon, selle parameeter või süntaks kaob PHP järgmistest versioonides, aga see ei mõjuta valitud versiooni tööd.
Zone Virtuaalserverites on Deprecated
teadete väljastamine vaikimisi keelatud, tõenäoliselt on muudetud seadistust rakenduse koodis, vähemtõenäoliselt globaalse php.ini
või .user.ini
abil (vt näidet Warning
teate juurest).
Seadistuskoha tuvastamiseks sobib käsurealt otsing:
grep -r E_ALL .
Näiteks OpenCart 1.5 puhul annab see tulemuseks järgmised failid:
./vqmod/vqcache/vq2-system_startup.php:error_reporting(E_ALL); ./system/startup.php:error_reporting(E_ALL); ./php.ini:;error_reporting = E_ALL;
PHP koodis tuleks teha muudatus error_reporting( E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED );
ning .ini
failides error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
Ühendus andmebaasiga ebaõnnestub
Kui peale PHP versiooni muutmist 5.6+ peale ühendus andmebaasiga ebaõnnestub, siis kontrollida ega andmebaasikasutajal ei ole kasutusel vana, 6-kohaline salasõna (vana krüptoga loodud salasõna).
Lahenduseks on ära vahetada andmebaasikasutaja salasõna. Uus salasõna töötab ka tagasiulatuvalt vanemate PHP versioonidega kui 5.6.
Navigatsioon ei tööta
Kui ei tööta navigatsioon lehekülgede vahel või vormi saatmise järel ei toimu soovitud tegevust, võib olla selle põhjuseks eeldus, et super-globaalsete muutujate GET, POST, Cookie (EGPCS) massiivid registreeritakse tavapärasteks muutujateks.
See PHP omadus aegus PHP versioonis 5.3.0 ja eemaldati PHP versioonis 5.4.0.
Täpsemalt lugeda PHP dokumentatsioonist: Using Register Globals, Migrating from PHP 5.3.x to PHP 5.4.x.
Näiteks on veebilehe menüü lingid päringusõne kujul domeen.ee/?lk=1
ja PHP-failis, kus on lehekülje laadimise loogika, kasutatakse super-globaalse $_GET['lk']
massiivi asemel muutujat $lk
.
Samamoodi ka vormi saatmise puhul, kus vormi elemendi nime <input type="submit" name="form_1" value="Saada">
ei kontrollita super-globaalsest $_POST['form_1']
massiivist, vaid otse muutuja $form_1
kaudu.
Kuidas veenduda, et server kasutab tõesti uut versiooni?
PHP versiooni muutumine serveris võtab aega kuni 3 minutit. Uue PHP versiooni rakendumise kontrolliks on soovitav teha suvalise nimega .php fail, mille sisuks:
<?php phpinfo();
Minnes veebibrauseriga lehele example.com/suvaline-nimi.php
kuvatakse PHP versiooni ja kõiki seadistusi (turvakaalutlustel soovitame faili seejärel kustutada).
Kui selgub, et koduleht uuema PHP versiooniga ei tööta, siis on võimalik tunni aja jooksul PHP versioon tagasi muuta. Seda saab teha haldusliideses pea- või alamdomeeni seadetes.