eval() helyett???
Sziasztok!
Előre bocsájtanám, h nem vagyok programozó csak kicsit belemélyedtem a webszerkesztés izgalmas világába.
Nos a következő problémával fordulok hozzátok:
Weboldalamhoz Joomla portálrendszert használok és a weboldal költöztetése után nem működik megfelelően az egyik - úgy nevezett - komponens. A hiba feltárásakor arra jutottam, hogy a következő kódrészletnél van a hiba.Valószinüleg az eval parancsban lévő változó ($lfields) -aminek értéke szintén egy php-kód - nem fut le valamiért az új szerveren ezért nem ad eredményt sem. Ez okozza a rendellenes működést.
Tudnátok valami alternativát ajánlani az eval-ra? Mivel tudnám kihelyettesiteni vagy kideriteni, h miért nem fut le a parancs?
Esetleg, hogyan tudnám valahogy máshogy lefuttatni a parancsot, az eredményt pedig valami tömbben vagy miben eltárolni majd printtel vagy echoval kiirni? Legalábbis valahogy igy képzeltem el. Bár lehet ezzel most nagy hülyeséget mondtam.
Segítségeteket előre is nagyon köszönöm.
■ Előre bocsájtanám, h nem vagyok programozó csak kicsit belemélyedtem a webszerkesztés izgalmas világába.
Nos a következő problémával fordulok hozzátok:
Weboldalamhoz Joomla portálrendszert használok és a weboldal költöztetése után nem működik megfelelően az egyik - úgy nevezett - komponens. A hiba feltárásakor arra jutottam, hogy a következő kódrészletnél van a hiba.
print "\t<tr class=\"$class\" ".$style." ".$onclick.">\n";
//print $lfields;
$str = null;
eval("\$str = \"$lfields\";");
echo $str. "\n";
print "\t</tr>\n";
Tudnátok valami alternativát ajánlani az eval-ra? Mivel tudnám kihelyettesiteni vagy kideriteni, h miért nem fut le a parancs?
Esetleg, hogyan tudnám valahogy máshogy lefuttatni a parancsot, az eredményt pedig valami tömbben vagy miben eltárolni majd printtel vagy echoval kiirni? Legalábbis valahogy igy képzeltem el. Bár lehet ezzel most nagy hülyeséget mondtam.
Segítségeteket előre is nagyon köszönöm.
"\$str
Egyébként a $str = $lfields; értékadás önmagában miért nem jó? Meg miért vegyíted össze-vissza a stringösszefűzéseket a behelyettesítésekkel?
így pl. miért nem jó?
$str...
Vagyis:
Tegyuk fel, hogy $lfields='"aa"."bb"';
- ha a $lfields-t tényleg egy "php-kód"-ként akarjuk értelmeztetni, akkor eval("\$str = $lfields;");
- ha sztingként, akkor viszont az okozhat galibát, hogy " van benne, és akkor valami addslashes kell bele:
eval("\$str = \"".addslashes($lfields)."\";");
?
Minek eval?
én is így értelmezem
te vagy :)
kis félreértés
A kód csak 1 részlet, méghozzá egy speciális összetevőhöz tartozó keresőé.
TEHÁT NEM ÉN ÍRTAM!!!
A kódrészletben van egy kikommentezett print parancs. Ha ezt a kommentet eltávolítom akkor a honlapon megjelenik $lfields értéke ami egy PHP-KÓD sorozat.
Az említett kereső egyébként működik tökéletesen a régi szerveren!
Hogy értsétek miről van szó vázolom a működését.
Adott 1 közösségi portál - Joomlával hajtva - ennek része egy usermanagement "szoftver" (Community Builder hátha valaki ismeri) amiben alapból nincs összetett kereső ezért ez egy külön "szoftver". Ez az összetett kereső pedig az új szerveren valamiért a találatokhoz nem ír eredményt ($lfields).
A találatok számát kiírja, sőt a userekre mutató link is ott van (a forrásban) de mivel $lfields -től nem jön vissza eredmény (nicknév, avatarkép, város stb) ezért nincs mi belinkelődjön.
Tehát $lfields értékét mindenféleképp futtatni kell, h működjön a dolog. Az eddig felhozott példákban viszont csak kiíródik $lfields értéke...ami nagyon kevés a boldogsághoz.
Ha jó vettem ki akkor az eval lefuttatja az "$lfields-ben" található kódot majd a kapott eredményt átadja $str -nek amit echo-val kiíratunk.
A joomláról meg csak annyit, h igaz van vele szívás, ha komolyabb oldalt akarsz csinálni, de még mindig ez a legkönnyebben testreszabható CMS mellesleg elég jól optimalizálható google papának.:)
A fenti kódot meg nem joomla fejlesztő készítette...
var_dump()
var_dump($lfields);
es kopizd mar be a kimenetet.
kimenet
Plusz kiírta a php-kódot.
Viszont rájöttem még 1 apróságra, arra, hogy ez a kód egy periódusban van benne.
Hogy lássátok miről volna szó itt a link.
A keresőbe írj be valamit mondjuk a példa kedvéért "viktor", majd nyomj entert vagy klikk a nagyítóra.
Bennehagytam a "var_dump($lfields);" sort...
periódus?
egész véletlenül nem register_globals on volt a régi helyen az újon meg off (ahogy az kell)?
Elképzelhető, hogy ez a modul vagy komponens erre számít és emiatt hiányzos a stringje?
register_globals
Megnéztem, de a register_globals mindkét szerveren OFF-ra van állitva.
Viszont most, hogy böngészgettem megláttam, hogy a míg a régi szerveren a MySql és a PHP is 4.xx verzió, addig az újon 5.xx ,gondolom ez (is) lehet a baja?
Letudnátok irni, hogy hogyan tudnam leellenőrizni, hogy $lfields értékében hol a hiba?
Ez a STRING (603)"" mit jelent?
Kezdek nagyon elkeseredni...
tényleg nincs megoldás???
Tényleg nem lehet kideríteni, hogy hol a hiba?
debug
(nehogy megkérdezd milyen debuggerrel, google :)
Köszönöm