Funkcja eval(); tworzenie obiektów [PHP]

0

Chciałbym się zapytać dlaczego taki kod nie działa...

include_once("ext/".$_GET['id'].".php");
$wykonaj = "$config = new ".$_GET['id']."();";
eval($wykonaj);
$config->config();

dla przykładu jeżeli zmienna $_GET['id'] przyjmie wartość users i dałbym taki kod:

include_once("ext/".$_GET['id'].".php");
$config = new users();
$config->config();

to działa poprawnie...

Prosiłbym o pomoc...
Z góry dziękuje :)

0

nie możesz dać tego new costam w tym pliku costam.php ? w ogóle to takie coś to jakoś tak mało bezpieczne mi się wydaje
chodzi o to że zmienną $wykonaj dałeś w podwójne cudzysłowy, to oznacza że parser przetworzy $config i z twojego:

$wykonaj = "$config = new ".$_GET['id']."()';";

zamiast:

$wykonaj = '$config = new users();';

(jeśli $config jest akurat puste)

wychodzi:

$wykonaj = ' = new users();';

(jeśli $config jest puste)
rozwiązanie to oczywiście zamiana wszystkich cudzysłowów "podwójnych" na cudzysłowy "pojedyncze" (apostrofy)

poza tym skoro już dałeś podwójne cudzysłowy to mogłeś to wykorzystać i nie wychodzić z nich w celu wpisania zmiennej $_GET[id]

0

Kurde faktycznie głupi błąd :P :) wielkie dzięki :) </quote>

0

Po co do tego eval?

$klasa = $_GET['id'];
$config = new $klasa();

1 użytkowników online, w tym zalogowanych: 0, gości: 1