ugrás a tartalomhoz

php-kód futtatása, amit adatbázisból olvasok ki

crash7 · 2008. Aug. 5. (K), 20.05
Sziasztok!

A segítségetekre lenne szükségem! Egy select-el olvasom ki az adatbázisból a php parancsot (pl.: 'echo helló world!') és et szeretném lefuttatni. van valami ötletetek?

Segítségeteket előre is köszi!: crash7
 
1

eval

tolmi · 2008. Aug. 5. (K), 20.53
eval() függvény amit te keresel, azonban szeretném felhívni rá a figyelmed hogy kb 4x lassabb az ilyen on-the-fly végrehajtott kód, mint az előre megírt, ráadásul az op-code cache-ek egyáltalán nem képesek bytekódra lefordítani előre az ilyen kódot, szóval az ilyen kódokon zéró hatékonysággal működnek.

Arról már nem is írok hogy ez milyen súlyos biztonsági problémákat jelenthet, mennyi nyűg lehet vele ésatöbbi.

Ha teheted, kerüld ki ezt a megoldást!
2

+1

janoszen · 2008. Aug. 5. (K), 21.43
Nem tudom, miért szeretnél Te ilyet csinálni, de soha, soha a 7 éves PHP-s pályafutásom alatt nem volt még szükségem ilyesmi használatára. Lehet, hogy én vagyok alulképzett, de szerintem, nem létezik olyan feladat, amit ennek mellőzésével ne lehetne megoldani.
3

Láttam már

sayusi · 2008. Aug. 6. (Sze), 08.02
Láttam már olyat, hogy adatbázisban volt a teljes html oldal. Egy text mező és abba minden... Hát gyönyörű volt. Majdnem elhánytam magam.
5

Nem alulképzet, hanem fantáziátlan ;))

pp · 2008. Aug. 6. (Sze), 09.00
Gondolom mindig csak a saját fejlesztésű cms-edet használod és még sose láttál olyat, hogy egy tartalom kezelőbe a webes felületen keresztül lehetett kis php kódokat betolni. Rengeteg hátránya van nyílván, de egy kis forgalmú oldalnál, ahol a probléma megoldásának az ideje kritikus ott bizony gyakran jól jön egy egy ilyen lehetőség. Nem beszélve egy egy olyan induló elképzelésről, ahol a tervezési fázisban jól jön az ilyen lehetőség, amit később nyílván ki fognak váltani stabilabb jobb megoldással. (vagy magába zuhan az egész összegányolt hanyatt esés ;))
Drupal-ban is lehet ilyet csinálni. Van is számtalan phpsnipet amik keringenek a neten és vagy működnek vagy nem. Aztán ott van a views amivel pikk-pakk összekattintgathatsz szinte bármilyen lekérdezést, sőt... Csak nem árt tudni melyik kattra milyen kód gyártódik le. Nem optimális megoldás lesz, hanem gyorsan elkészíthető megoldás. (bár a views bizonyos esetekben az optimálishoz közeli megoldást eredményez.)

Erre van igény ezzel nem érdemes vitatkozni. Azért mert Te még ilyet nem láttál attól még létezik mint ahogyan a hold túlsó oldala is. (vagy szerinted ott csak egy nagy lyuk van?) ;)

Egyébként egy kis ügyes fájlba gyorstárazós/include-lós megoldással kiküszöbölhető a sebesség veszteség amiről tolmi beszélt. Nyílván a biztonsági kockázat fennáll! Gyorsan lehet ügyes biztonsági rést ütni a rendszeren ezzel a megoldással. Tehát csak óvatosan, körültekintően.

pp
6

fájl létrehozása?

Szekeres Gergő · 2008. Aug. 6. (Sze), 09.05
még sose láttál olyat, hogy egy tartalom kezelőbe a webes felületen keresztül lehetett kis php kódokat betolni


ennyi erővel lemented fájlba és adatbázisban csak az adott funckióhoz tartozó controller adatokat tárolod. Akkor nem kell adatbáziskezelővel gányolni a php kódot. De nem értem ettől miért lenne gyorsabb a fejlesztés, a php kódot ugyanúgy meg kell írni..
7

Tervezés egyben az elkészítés is.

pp · 2008. Aug. 6. (Sze), 09.20
Képzeld el az, amikor van egy kattintgatós felületed amin már mindent összekattintottál csak egy icipici hiányzik még. Ekkor jön egy barátod aki ért a php-hez mert Te nem értesz hozzá. Ekkor vagy az egészet újra megírja és leprogramozza (sok idő) vagy ha van lehetőség rá betolja azt a 3 sorors PHP-t ami az adott pici dolgot hozzáteszi a kész műhöz. Ha úgy tetszik a feladat specifikációjának elkészítése(tervezés) maga a klikkelgetés, szerencsés esetben a programozás/megvalósítás ideje nulla vagy még pár perc. ;)

Lehet, hogy ez nem jó, lehet, hogy ez gányolás, lehet, hogy jobban is meg lehetne csinálni, ezen én nem vitatkozom, de hogy van rá igény az biztos.

Lásd mire is akarja a téma felvetője használni ezt a lehetőséget. Nyílván van trillió előre legyártott ellenőrző lehetőség amit csak kattintgatni kell, de szeretné megadni a lehetőséget, hogy a lehető legrugalmasabb legyen a rendszere. Nyílván ha előkerül egy olyan php snipet amit gyakran használnak akkor ahhoz ír egy újabb bővítményt, amit aztán már kattintgatni is lehet. (még gyorsabb a "fejelsztés")

pp
13

de mit kattintgatsz?

Szekeres Gergő · 2008. Aug. 6. (Sze), 10.20
ugyanúgy kész modulokat állítasz be, vagy telepítesz az ilyen felületeken, ezt a hatást el tudod érni anélkül, hogy adatbázisban tárolod a kódot...

Ehhez csak normálisan meg kell írni a saját moduljaidat, majd konfigurlálni(akár ezt lehetd adatbázisban is tárolni, de maga a program az egy normális fájlban van). ehhez a művelethez lehet aztán "installációs csomagok" meg egyéb csilivili felületet írni, viszont szerintem egy fejlesztő a saját rendszerének nem nagyon fog ilyeneket készíteni.
14

olvasod amit írok?

pp · 2008. Aug. 6. (Sze), 10.39
Pont arról van szó, hogy nem a fejlesztő fogja ezt használni, hanem a megrendelő.

Hagyományos mosópor:
1. Megrendelő specifikálja a feladatot (x idő)
2. fejlesztő megvalósítja (y idő)

összidő: x+y

Kattints folttisztító adalék:
1. Megrendelő specifikálja a feladatot (kattintgat x idő)
2. fejlesztő nem kell (0 idő)

összidő: x

Ha még azt is megnézzük, hogy a hagyományos mosópornál gyakran foltos marad a ruha és újra mosni kell.. vagyis nem az készült el amire a megrendelő gondolt, mivel rosszul specifikált a feladat, mivel nem ismeri a lehetőségeket és korlátokat. Akkor láthatjuk, hogy nagy a nyereség, hisz a legtöbb esetben a fejlesztő munka nélkül marad, ami szomorú (brühühü) de a megrendelőnek jó, mert occsó és azt kapja amit akart (még ha az nem is az ami kéne neki ;)) nem kell várni senkire stb.

pp
8

Gyors fejlesztés

zila · 2008. Aug. 6. (Sze), 09.20
De nem értem ettől miért lenne gyorsabb a fejlesztés, a php kódot ugyanúgy meg kell írni..

Üldögélsz egy kávéházban, nincs nálad a notebookod, csak egy okostelefon. Hívnak, hogy ki kéne javítani/módosítani kellene egy apróságot a siteon. Felballagsz a weboldalra, bejelentkezel adminként, beszúrod a pár soros php kódrészt a megfelelő helyre, elmented és örülsz. A megrendelő is örül, hogy milyen gyors vagy. Nyilván a cms motornak gondoskodnia kell arról, hogy az ilyen módon beszúrt kódok a lehető leggyorsabban fussanak, így aztán cache-el, kiírja file-ba vagy bármilyen hasonló technikával elérhető, hogy az oldal kiszolgálása gyors legyen, hogy ez milyen hatékonysággal működik az a cms-től függ...
9

Legyen...

janoszen · 2008. Aug. 6. (Sze), 09.57
A) Legyen nálad notebook B) legyen egy szervered, amire be tudsz jelentkezni és meg tudod csinálni. Tudom, kolbász, kerités meg a zöld fű, de ezt mondhatnánk akár munkaeszköznek is.
15

Részben

zila · 2008. Aug. 6. (Sze), 11.38
Nem viszem magammal mindenhová a notebook-ot, csak ha biztos vagyok benne, hogy kelleni fog. Szerver van több is, az nem probléma. De vi-ozni még rosszabb telefonról mint egy webformba írni... A másik meg, hogy kulccsal lépek be a szervereimre, publikus gépekről csak akkor, ha élet-halál kérdése...
12

hibalehetőség

Szekeres Gergő · 2008. Aug. 6. (Sze), 10.15
egy kis képernyön beletuszkolt pár sor lehet tele van hibával, hisz azért egy telefon nem rendelkezik konrét feljesztői környezettel (legalábbis nem olyannal), kicsi a képernyő stb. Otthon meg bogarászhatsz hogy akkor mit is módosítottál, és hogy a fejlesztői környezetet szinkronizáld az éles környezethez. Nem tudom milyen projektekben vagytok benne, de sztem az hogy egy hibát 5 perc alatt, vagy 10 perc alatt egy internetkávézóból javítasz ki(pendrive, putty alap.. :)), az már majdnem mindegy.

de ezen kár vitatkozni, alapvetően el tudom fogadni az indokod...
4

Hogy miért akartam ezt használni?

crash7 · 2008. Aug. 6. (Sze), 08.57
Köszi az eddigi segítségetek, és véleményetek!

Hogy miért akartam ezt használni? A célom egy űrlap kezelő "motor" készítése. Az elképzelt működés nagyvonalakban: 1., Az űrlapon szereplő beviteli mezők listáját tárolom egy táblában 2.,Amikor jön egy kérés az űrlapról, egy rejtett azonosítón (űrlap_id) keresztül kiolvasom az adott űrlapon szereplő beviteli mezőket, ezt feltöltöm egy tömbbe, + az űrlapon kitöltött értékkel párosítom. Eddig talán egy Joomlás űrlapkezelőt koppintottam. Innen jött az ötlet, hogy az egy mezőkhöz tartozó n számú ellenőrzést miért ne tárolhatnám szintén adatbázisban, és ciklusba szervezve lefuttanám.

Röviden ennyi, remélem érthetően le tudtam írni, bár egy kicsit nekem is zavaros így átolvasva:)
10

Joomla?

janoszen · 2008. Aug. 6. (Sze), 09.58
Nem tudom, én az 1.x Joomlát nézegettem annó, de 5 perc kódnézegetés után úgy döntöttem, hogy inkább nem. A Wordpressnél több lelkierőm volt, azt végigdebuggoltam, de az sem volt egy élvezet.

Egyébként amit Te szeretnél megcsinálni, ahhoz nem kell eval() PHP-be, mert egy kis tervezéssel meg lehet csinálni, hogy megfelelően paraméterezve az űrlapmezők odanőjenek úgy, ahogy egy config fájlban letároltad (és sztem ne használj erre adatbázist).
11

eval evil

virág · 2008. Aug. 6. (Sze), 10.08
Helló,

én eddigi életem során 1x használtam kb. 1 hete eval-t, másnap átírtam a kódomat úgy, hogy ne legyen benne :) megrémültem ugyanis tőle.

Egyetértek veled abban, hogy az eval használatának pusztán a felmerülése is elgondolkodtató (ha van valamilyen szintű tervezés, akkor ugyanis eval nem fordulhat elő, legalábbis én így gondolom), de szerintem semmivel nem szabad ennyire radikálisan szembeszegülni, mert soha nem lehet tudni, hogy mit hoz az élet...
16

Lehetőség

janoszen · 2008. Aug. 6. (Sze), 12.38
Nekem csak az a bajom, hogy ha megvan adva a lehetőség, akkor "miért ne" alapon születik bele kód. Ha nincs eval, nem is fog senki elgondolkozni azon, hogy használja. De mondhatok másik példát. Amióta megcsináltam a tudományt, hogy kézzel ne lehessen kódot másolni a szerverre, hanem az automatikus mechanizmust kelljen használni, ami rákényszerít előbb a tesztelésre, érdekes mód mindenki úgy csinálja. :)
17

Vissza a kályhához...

crash7 · 2008. Aug. 6. (Sze), 12.52
Akkor visszatérve a konkrét kérdéshez, próbáljunk hozni egy konzekvenciát amit a többség jóváhagy!

Az már lejött, hogy ne adatbázisból olvassak ki futtatásra szánt PHP kódot. Az szerintetek járható út-e, ha csak azt olvasom ki az adatbázisból, hogy milyen php állomány, vagy függvény fusson le?

Válaszotokat előre is köszönöm: Crash7
18

Form ellenőrzések

zila · 2008. Aug. 6. (Sze), 13.39
Én azt tárolnám, hogy milyen ellenőrzéseken essen át az adott érték. Pl. email, szám (intervallum, min, max), url, dátum (múltbéli, jövőbeli), stb. illetve kötelező-e a mező vagy sem.
Erre készíteném fel a kódot, hogy a megfelelő validátorok hívódjanak meg szépen sorban a form feldolgozása közben, nem kötelező mezők esetén csak akkor ha van megadva érték.

Így semmilyen kódhoz köthető adat nem kerül adatbázisba. Az ellenőrzés típusa szerint fogsz meghivogatni függvényeket, de ne a függvénynevet tárold így megvéded magad olyan esetektől, hogy valami triviális függvénynevet csempésznek a db-be (pl. SQL inject-tel, ha nem védekezel) ami káros következménnyel járhat...
19

Flexibilisebb hozzáállás

janoszen · 2008. Aug. 6. (Sze), 16.28
Nos, ha nekem kellene egy dinamikus formgyártó eszközt írnom, akkor először is szomorú lennék, másodszor pedig azt tenném lehetővé a felhasználónak, hogy megfogalmazzon kritériumokat a mezőkre, hogy mi lehessen benne. Ennek függvényében kell ellenőrzéseket lefuttatni. Nyilván, ennek megfelelően dinamikusan kell létrehozni a formokat. Ezt viszont - ha pl objektum-orientáltan programozol, akár úgy is megteheted, hogy megfelelő nevü osztályokat példányosítasz.
20

Én már vettem részt ilyenben..

Ustak · 2008. Aug. 6. (Sze), 20.53
én már vettem részt ilyen projektben, ám igaz ami igaz a kliens oldali javascript volt a feladatom. Persze ilyenkor egy picit mégis bele kell mászni a php-ba és az sql-be is, de bevallom férfiasan, többször végignéztem a kódot mire megértettem ami engem érintett. Igen bonyolult adatbázis kezelő rendszer volt a háttérben, számított mezőzéssel és coalesce meg outer meg join, meg mindenféle csúnya szavakkal :-), néhol olyan hosszú SELECT-ekkel mint ez a hozzászólás. Minden esetre a kliens felé egy php oldal rakta össze az ürlapot, amit utána ajaxal raktunk a helyére, persze php eval nélkül. Szerintem mivel az ürlapon használható eszközök száma véges, nyugodtan lehet egy olyan php kódot írni, mely adatbázisban tárolt értékek szerint összerakja neked a vágyott ürlapot. Amit viszont mint javascript részről javaslok, hogy minél kevesebb találkozása legyen a php-nek és a javascriptnek (ha lesz). Az ilyenek például:

    echo "<input type=".$inputtype." value=".$value." onclick=click('".$click.'"); style=\"".$style."\" />";
   //vagy
   $javascript="var tomb=new Array();tomb['$i']='$ertek';";

mikor az ilyenek több soron és beláthatatlan elágazásokon keresztül haladnak, akkor nagyon "izgi" őket debugolni :-) Arról nem is beszélve, hogy ha az adatbázisból belekerül mondjuk az $ertek-be egy ' akkor nézhetjük miért unterminated string literal :-). Tudom, hogy vannak rá megoldások, és már a javascript más utakon jár, ám akkor még függvényeket írtunk és így csináltuk, és nagyon büszkék voltunk rá :-)
21

Off: debug

janoszen · 2008. Aug. 7. (Cs), 09.09
Mostanában sokat kellett JSeznem (na én a dolognak a PHP oldalán mozgok) és azt láttam, hogy a Firebug illetve egy normálisan berendezett PHP debugger végtelenül sokat tud segíteni. Egyébként meg a változókra addslashes plusz templatezés és akkor kevesebb problémába fog valszeg felmerülni.