1. Home
  2. Tehniline
  3. PHP
  4. Kuidas testida ja uuendada aegunud PHP versiooniga Virtuaalservereid?

Kuidas testida ja uuendada aegunud PHP versiooniga Virtuaalservereid?

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:

Minimaalne PHP versioon, mida Zone lubab sul endale valida ongi PHP 5.6. Kuid arvesta, et ka see on aegunud – selles turvaauke enam arendaja poolt ei parandata, kuigi tehniliselt on võimalik seda veel toetada. Soovitav on uuendada PHP versioonile 8.0, kuna ka PHP 5.6 on aegunud ja ei saa enam turvauuendusi.

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.

Updated on 29. nov. 2022

Was this article helpful?

Related Articles