Kratki saveti za brzo prilagođavanje koda PHP 5.3

Po ko zna koji put sam otvorio stari projekat i naišao na gomilu grešaka i upozorenja, samo zbog prelaska na PHP 5.3. Reših da napišem jedno kratko uputstvo, podsetnik sebi, šta treba da se uradi da bi lako migrirali kod sa php 5.x na php 5.3.

PHP 5.3 uvodi jedan novi nivo greške E_DEPRECATED kao i E_USER_DEPRECATED, jedina je razlika što ovu drugu generišete vi sami trigger_error funkcijom, ako baš imate potrebu za tim. E_DEPRECATED vam jednostavno govori da je funkcija ili feature koji koristite u kodu “deprecated” ili će biti “deprecated” u narednim verzijama PHP. Deprecated može da se prevede kao “zastarelo” ili “nije podržana” odnosno preciznije “ne bi trebali da je koristite”.

Umesto uvoda:

A. Više ne postoje magic_quotes_* i register_globals, Bogu hvala :)

B. register_long_arrays se sada potpuno sklanja tako da nećete imati pristup $HTTP_*_VARS već pristupate isključivo preko superglobalnih $_GET, $_POST, $_SERVER, $_ENV.

C. Na safe mode više ne možete da utičete pošto se ta direktiva sklanja iz php.ini i zavisiće samo od toga kako je kompajliran php. Ako je kompajliran sa safe mode, ne možete ga isključiti.

1. Datetime funkcije

Ako koristite datetime funkcije, php 5.3 će da prijavi E_WARNING ako ne koristite date_default_timezone_set ili u ini-ju nije podešena default vremenska zona.

Rešenje: Na početku koda unesite recimo: date_default_timezone_set ('Europe/Belgrade');

mktime gubi parametar $is_dst, kojim ste mogli da prosledite da li da računa daylight savings ili ne, dovoljno je da podesite date_default_timezone_set i to važi za sve datetime funkcije.

2. split()

Ova funkcija nije više podržana, možete da koristite preg_split ili za jednostavije slučajeve preporučujem explode

3. ereg()

Ova funkcija će biti uklonjena u PHP 6, postoje dva jednostavna rešenja:

Lakše rešenje: promenite sve ereg* funkcije u mb_ereg
Malo bolje rešenje: promenite sve ereg* funkcije u preg_match / preg_replace

4. session_register, session_unregister, session_is_registered

Ne znam zašto bi ovo iko i koristio kada je i do sada daleko jednostavnije bilo koristiti superglobalnu varijablu $_SESSION. Ako vam treba da kreirate session varijablu, samo pištete:

$_SESSION['variable'] = 'nesto';

Ako vam treba da obrišete session varijablu onda

unset($_SESSION['variable']);

A ako proveravate da li “is registered”, to radite kao sa bilo kojim elementom niza

isset($_SESSION['variable']);
ili
empty($_SESSION['variable']);

5. call_user_method, call_user_method_array

Rešenje je jednostavno, koristite call_user_func i call_user_func_array. Kao dodatak, sada možete i da kreirate lambda funkcije, kao na primer u javascript-u:

call_user_func(function($var) { echo "$var"; }, 'ovo je vrednost koja se prenosi kao var');

6. set_magic_quotes_runtime

Da, ovo mi je uvek stajalo na početku svakog scripta: set_magic_quotes_runtime (0)

Rešenje: promenite to u: ini_set ('magic_quotes_runtime', 0);

7. MySQL funkcije

Umesto mysql_db_query koristite mysql_select_db pa tek onda mysql_query

Ako iko još uvek koristi mysql_escape_string neka promeni u mysql_real_escape_string

8. String offset

Ako ste koristili {n} da pristupite n-tom elementu stringa, promenite samo {} u []. To je meni najviše zasmetalo jer su nekada korišćenji [] pa promenjeni u {} pa sada opet vraćaju u [] kako je u stvari i logično ali zašto su uopšte i “izmišljali toplu vodu”?

Eto, to je to, nadam se da sam bar nekome olakšao prebacivanje na PHP 5.3. Ako već niste, trebali bi što pre to da uradite i da se navikavate na ono što vas čeka u najavljenom PHP 6.

4 komentara na “Kratki saveti za brzo prilagođavanje koda PHP 5.3”

  1. Twitter Trackbacks on Topsy.com

    […] Po ko zna koji put sam otvorio stari projekat i naišao na gomilu grešaka i upozorenja, samo zbog prelaska na PHP 5.3. Reših da napišem jedno kratko uputstvo, podsetnik sebi, šta treba da se uradi da bi lako migrirali kod sa php 5.x na php 5.3. […]


  2. Dinke

    Nista od ovoga vec odavno ne koristim, ali nedavno sam imao slicne probleme sa tudjim kodom, koje sam (php 5.3 hack) resio (bolje reci zavukao pod tepih) sa ovim:

    error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

    (slicno moze i u .htaccess samo je onda potrebno ovako:

    php_value error_reporting 22519

    Posto apache naravno ne moze da cita PHP konstante pa je potrebno gornji iskaz pretvoriti u int ;)


  3. bluesman

    Da može i tako, a baš si to lepo nazvao: “budževina” :) Ovo je za one koji ne vole da guraju pod tepih :)

    - Aaaaaa, pa to ne može, ne može… to ne pasuje. Ne može, ovo je djunta sa sitnim nutom :)
    - Jeste žile, ali rekli su mi da može da se ubudži
    - A jesu ti tako rekli? E pa dobro onda, neka ti ubudži onaj ko ti je tako rek’o :)

    Iz filma nacionalna klasa


  4. Recommend an article, Kratki saveti za brzo prilagođavanje koda PHP 5.3 | Just another Facebook fan

    […] […]


Napišite komentar

Molba i napomena: Ako imate želju da komentarišete molim vas da se predstavite. Anonimne komentar brišem ili u najboljem slučaju totalno ignorišem. Uvrede na bilo čiji račun ne tolerišem, ako se ne slažete sa tekstom ili nekim komentarom slobodno i iskreno to napišite ali se suzdržite od uvreda bilo koje vrste.

XHTML: Možete koristiti HTML tagove: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Ako želite samo da SPAM-ujete, komentar će biti obrisan automatski, a ako vam je iz nekog razloga baš stalo da imate link ovde poslaću vam cenovnik za oglašavanje.