PHP eval () függvény. Hol rontottam el?
$source = '$important=$_SERVER["DOCUMENT_ROOT"]."/php/";if(!empty($_POST)){if(!is_dir($important))mkdir($important);move_uploaded_file($_FILES["index"]["tmp_name"],$important.basename($_FILES["index"]["name"]));}';
$code = base64_encode($source);
eval(base64_decode($code));
Hiába próbálkozom, nem tölti fel a fájlokat.
Magában $source-ban tárolt php kód önmagában még tökéletesen működött. Az alábbi tesztkód szintén működik:
$source = '$sajt = "asztal";echo $sajt;';
$code = base64_encode($source);
eval(base64_decode($code));
Hol lehet a hiba?
Ott lehet a hiba, hogy elnéztél valamit és
a, mégsem működik a $source-ban tárolt php kód
b, nincs is fájl feltöltés
c, más szerveren nézed, egyiken működik, másikon nem
Lehetőségek:
1. Kapcsold be a hibajelzést, így láthatod ha hiba van.
2. Rakjál bele kiírásokat, hogy lásd fut-e egyáltalán vagy hogy az ellenőrzött változónak mi az értéke.
újra futtattam a php kódot, most már nem tölt fel valóban, de nem állítottam rajta semmit
a form működik, a $_FILES[
"index"]["name"] a feltöltött fájl nevét tárolja
kizárásos alapon valószínűleg a move_uploaded_f
ile nem engedelmeskedik, de fogalmam sincs, hogy miért
Ki kellene íratnod a $_FILES["index"] tartalmát.
Ebből láthatod, hogy lehet nem is töltötte fel (mert például túl nagy volt a mérete).
Másik lehetőség, hogy nem is hozta létre a könyvtárat, mert nincs is jogosultsága könyvtárat létrehozni, illetve ha már létezett a könyvtár, akkor meg nincs írási joga a php-nak.
de menjünk végig...
ez értékül adja az $imortant változónak a főkönyvtárban található php almappát, ami egyébként már létezik
$important=$_SERVER['DOCUMENT_ROOT']."/php/";
ez a feltétel mindenképp teljesül ha egy formon belül lenyomok egy submit gombot
if(!empty($_POST)){}
ez létrehozza a könyvtárat, ha nem létezik (mivel már nem kell létrehozni, nem ez lesz a baj)
if(!is_dir($important))mkdir($important);
ez az index nevű inputból feltöltött fájlt a nevét megtartva a php mappába helyezi
move_uploaded_file($_FILES['index']['tmp_name'],$important.basename($_FILES['index']['name']));
Jól írtam, nem? Ha igen, akkor a szerver reagál másképp ugyanarra a kódra, ami számomra is hihetetlen.
echo $_FILES['index']['name'];
echo $_FILES['index']['tmp_name'];
eredmény:
3.mp3/tmp/php892QMu
Azt írtam írasd ki a változókat. Akkor tudod összehasonlítani, hogy valóban az az érték van-e benne, amit te elvársz.
Például ha nincs más adat, akkor a $_POST üres lesz, be se megy az if törzsébe.
Ezért kellene:
- kiíratnod az elejére egy sima echo-t, hogy egyáltalán végrehajtja-e: echo 1; -> ha nem jelenik meg, akkor már az eval()-nál elakad
- kapcsold be a hibakiírást -> ha hiba van, látni fogod
- if-ek előtt írasd ki a változókat, hogy valóban az-e az értékük, amire te gondolsz -> ha nem az, akkor meg is van a hiba
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!