Az eval () egy legitim módszer a php-ben?
Itt a link róla:
Szoktak ilyet használni? Ha egy programozó meglátja, nem kap agykukit tőle? Komolyan kérdezem, mert számomra most jól jönne, de olyan gányolásnak tűnik. Ti mit gondoltok?
Most elég gyors a kereső 500 000 sorral ebben a formában. Én viszont azt csinálom, hogy addig megyek ezekkel az ifekkel, amíg nem találok 10-20-50 darabot, utána megállítom a while ciklust. Az indexet megjegyzem, és ugye következőleg már csak onnan keresek a léptetővel. Így nem kell átnézni sokat egyszerre. Ezt az adatbázismodellt is megnézem, de még sose hallottam ilyesmiről.
Valami apache lucene-ről hallottam, az ilyesmi lenne?
Itt van az xml: pastebin com/YL8tNBQe
Itt a php: pastebin com/DAxgWz68
(A pontot írd be a .com elé!)
Van egy tömbünk a keresendő adatokkal $keres neven, van olyan elem ami üres, azt nem adta meg a felhasználó -> ebben az esetben bármilyen egyezés megfelel:
$keres = array(
"hanyajtos" => 4,
"kobcenti" => "",
"marka" => "ford",
"tipus" => "fiesta"
);
$keresendo = count($keres);
$keresendo tárolja, hány db értékre keresünk. Betöltjük az xml-t az $osszesauto-ba, végigmegyünk rajta.
Minden egyes <auto> minden egyes kulcsánál (ugye a kulcs a 'hanyajtos', a 'kobcenti' stb., az érték meg a kulcshoz tartozó érték) végigmegyünk a $keres tömbön is, és első körben kulcsokat hasonlítünk össze kulcsokkal!
Az aktuális <auto> aktuális kulcsa és értéke: $osszesauto->current()->children() as $kulcs => $ertek
A $keres tömb keresendő kulcsa és értéke: $keres as $kereskulcs => $keresertek
Ha a keresendő kulcsunk megegyezik az aktuális <auto> aktuális kulcsával, és a kulcsok értéke megegyezik vagy ha a kulcs értéke üres, akkor van találat:
if ($kereskulcs == $kulcs and ($keres[$kereskulcs] == $ertek or empty($keres[$kereskulcs])))
Pontos találat az, ha a keresendő kulcs értéke pontosan azonos az <auto> aktuális kulcsának értékével:
if ($keres[$kereskulcs] == $ertek)
Egyéb esetben (mikor a keresendő kulcs értéke nincs megadva) van üresre találat. Egyenlőségvizsgálat helyett persze lehet bele rakni kisebb-nagyobb vizsgálatot is, és azt is meg lehet csinálni, hogy üres adat esetén ne legyen elfogadható semmilyen érték.
Találat akkor van, ha a $keresendo értéke megegyezik a $talalat értékével, tehát ha az összes kulcsra van találat.
Nem tudom milyen gyors, nem teszteltem le sok adattal. A foreach-ek miatt lehet, hogy lassú lesz. De lehet optimalizálni pl. azzal, hogy csak az első X találatig keresel. Bár az az igazság, hogy ha production környezetbe használod a cuccot és tényleg sok adatod van, akkor mindenképp adatbázissal kéne az ilyesmit.
Én az eval()-t base64-el kódolt kódrészlet futtatására használtam, hogy a laikus megrendelő, akit nem csíptem, még csak ne is sejthesse, hogy egy fájl feltöltő backend részét rejtettem el, magát a kódot meg egy $important nevű változóban tároltam el, hogy fontosnak tűnjön.:D
Ugyan ez kicsit más szituáció, de ebben az esetben is egy rosszindulatú kód futtatására lett felhasználva a függvény, szóval az elsődleges funkciója mindenképp ez.:D
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!