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.
u 02:10
[…] 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. […]
u 02:21
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
u 02:25
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
u 11:24
[…] […]