PDA

Pogčedajte punu verziju : Override register globals...


dee
26. 09. 2006., 20:51
ako ikad iko naidje sa slicnim problemom, neka ne izgubi zivaca i vremena ko ja danas...

alzo...

dobio na instalaciju neki prastari CMS koji radi samo sa register_globals=on. da stvar bude interesantnija, instalira se na php/MySQL 5/5 i Apache 2 (koji za php_flag u .htaccess vraca Server Error)...

i nakon lutanja i googlanja, ispade ovaj komadic koda koji dodan u npr. config (kojeg inkludaju sve skripte aplikacije) rjesava stvar:

if (!ini_get('register_globals')) {
$superglobals = array($_SERVER, $_ENV,
$_FILES, $_COOKIE, $_POST, $_GET);
if (isset($_SESSION)) {

array_unshift($superglobals, $_SESSION);
}
foreach ($superglobals as $superglobal) {
extract($superglobal, EXTR_SKIP);

}
}

pa ako ikome ustedi minutu vremena i milimetar zivaca - vrijedi :)

Ilija Studen
26. 09. 2006., 21:02
Ovo treba zakonom zabraniti. Mislio sam da su diskusije na ovu temu zatvorene pre dve godine?

dinke
26. 09. 2006., 21:09
Ma daj, ne znam da li sam nesto propustio, ali koliko se razumem u medicinu ovo:

ini_set('register_globals', 1);

resava sve probleme.

Edit
Ah, ipak ne ... PHP_INI_PERDIR

@Ilija
Ne bi mi verovao koliko se starih aplikacija/sajtova vrti jos uvek live, a nemaju svi volje/novca da ispravljaju taj kod.

dee
26. 09. 2006., 21:19
Ma daj, ne znam da li sam nesto propustio, ali koliko se razumem u medicinu ovo:

ini_set('register_globals', 1);

resava sve probleme.



ne sa register globals...

@Ilija
sorry, nisam ovo mislio stavit kao diskusiju jer je o ovome receno sve i preko vise toga. nego bas ovo sto dinke kaze, naleti se na takav slucaj i onda razbijaj glavu sta ces -> smisljat/trazit ovakva rjesenja ili prepisivat varijable u par hiljada linija koda.

al ko sto rekoh, namjera mi nije bila diskusija nego cisto arhiviranje jednog konkretnog slucaja ako ikad ikome bude zatrebalo. that's all :)

Ilija Studen
26. 09. 2006., 21:38
Opušteno. Shvatam i zašto si postavio temu, a i da imaju tone koda koji još uvek koristi tehnike koje su odavno "obeležene" kao zastarele ili potencijalno opasne.

Btw, postoji par načina kako da umetneš promenjive u globalni scope - ekstraktovanjem promenljivih dok si u njemu (što si ti i uradio) ili da ih umetneš u $GLOBALS niz. Iako nije diskusija ipak savet: ne radite to. Što čistiji globalni scope to je lakše, posebno ako su u pitanju složenije aplikacije koje treba održavati na duže staze.

dinke
26. 09. 2006., 21:47
Btw, Apache2 obicno vraca "internal server error" ako php podesavanja u .htaccess fajlu ne uokviris sa <IfModule ... na primer :

<IfModule mod_php5.c>
php_flag register_globals on
</IfModule>

cvele
26. 09. 2006., 23:34
mnogo jednostavno
if(!empty($_GET)) extract($_GET);
if(!empty($_POST)) extract($_POST);
if(!empty($_COOKIE)) extract($_COOKIE);
if(!empty($_SESSION)) extract($_SESSION);