Autor | Zpráva | ||
---|---|---|---|
Matla Profil * |
#1 · Zasláno: 16. 6. 2011, 06:37:27
Ahoj,
mám výpis souborů, kde když se klikne na některý znich, objeví se vedle něj meníčko s možnostmi, co se s ním má udělat. Je tam taky možnost "odstranit". Už sem se v tom začal nějak patlat, ale mam to špatně. odkaz odkazuje sem: <a href="smazat.php?file=".$file.">Smazat</a> a soubor smazat.php obsahuje: <?php $soubor = ( $_GET["$file"]); unlink ($file); ?> Kde dělám chybu? |
||
panther Profil |
#2 · Zasláno: 16. 6. 2011, 06:57:34 · Upravil/a: panther
Matla:
$soubor = $_GET['file']; // bez dolaru, ta GET proměnná se jmenuje file, není proměnná |
||
Taps Profil |
#3 · Zasláno: 16. 6. 2011, 07:01:38
Matla:
<?php $soubor = ( $_GET["file"]); unlink ($soubor); ?> |
||
Matla Profil * |
#4 · Zasláno: 16. 6. 2011, 07:27:18
Díky za opravu, ale chyba je ještě někde.
Je v tom odkazu. Ten odkaz je vražený do php, takže vypadá ve skutečnosti takto: <a href=\"smazat.php?soubor=\"$file\"\" class=\"right negative pill button\"><span class=\"trash icon\"></span>Odstranit</a> Mam chybu asi tam, kde je to tučné. Protože když se udělá výpis souborů, ten odkaz vypadá potom takhle: http://adresa.do/upload/smazat.php?soubor= - a tady je prázdno. Je tam problém s tou proměnnou, která se do html nevypíše. Zkouším úplně vše, ale nefunguje nic. |
||
Taps Profil |
#5 · Zasláno: 16. 6. 2011, 07:47:08 · Upravil/a: Taps
Matla:
lze to udělat jednoduše :-) echo '<a href="smazat.php?soubor='.$file.'" class="right negative pill button"><span class="trash icon"></span>Odstranit</a>'; |
||
Matla Profil * |
#6 · Zasláno: 16. 6. 2011, 08:12:01
Ne, vypisuje mi to tuto chybu:
Warning: unlink(): open_basedir restriction in effect. File() is not within the allowed path(s): (/home/users/kubakoum/:/var/php/:/usr/share/pear/) in /home/users/kubakoum/pocitadlo.cekuj.net/web/upload/smazat.php on line 3 |
||
Taps Profil |
#7 · Zasláno: 16. 6. 2011, 08:35:30 · Upravil/a: Taps
Matla:
do funkce unlink doplň cestu k souboru <?php $soubor = ($_GET["file"]); unlink ('/slozka/'.$soubor); ?> |
||
Matla Profil * |
#8 · Zasláno: 16. 6. 2011, 08:40:02
Warning: unlink(/upload/): No such file or directory in /home/users/kubakoum/pocitadlo.cekuj.net/web/upload/smazat.php on line 3
|
||
Taps Profil |
#9 · Zasláno: 16. 6. 2011, 08:44:51
Matla:
zkus unlink ('/upload/'.$soubor); |
||
Stano Profil |
#10 · Zasláno: 16. 6. 2011, 11:58:12 · Upravil/a: Stano
Matla:
v url sa nedávajú úvodzovky. echo '<a href="smazat.php?soubor=$file" class="right negative pill button"><span class="trash icon"></span>Odstranit</a>'; |
||
Taps Profil |
#11 · Zasláno: 16. 6. 2011, 12:32:16
Stano:
podle mě tam ty uvozovky ničemu nevadí. |
||
Stano Profil |
#12 · Zasláno: 16. 6. 2011, 12:40:31
Taps:
napr tu na fóre url s ' alebo " nefungujú. a v konečnom dôsledku by ich musel stade mazať leb $_GET["soubor"] = "\"nazov_subora.jpg\""; neskúšal som to ale myslím že to tak bude. |
||
YoSarin Profil |
#13 · Zasláno: 16. 6. 2011, 12:54:13
Stano:
tvůj příklad je blbě - $file zůstane $file - nevloží se tam obsah proměnné. Podívej se na rozdíl mezi " a '. Uvozovky v Tapsově příkladě nejenže ničemu nevadí, ale dokonce jsou nutné Matla: unlinkuješ cestu začínající "/" - tzn snažíš se z rootu smazat adresář který tam není. A i kdyby tam byl, tak na něj nemáš práva. řekni nám kde ve struktuře tvého webu je soubor který chceš smazat A potom se trochu zamysli nad zabezpečením - takhle ti může kdokoli smazat cokoli z webu (přinejmenším) |
||
Stano Profil |
#14 · Zasláno: 16. 6. 2011, 14:10:01
YoSarin, Taps:
jop jasne zle som to pozrel moja chyba. už vidím. |
||
Matla Profil * |
#15 · Zasláno: 16. 6. 2011, 16:01:48
soubor ke smáznutí je ve stejném adresáři jako ten s tlačítkem odstranit, takže cesta není nutná.
|
||
YoSarin Profil |
#16 · Zasláno: 16. 6. 2011, 16:51:04 · Upravil/a: YoSarin
Matla:
Tak pak by to mělo být nějak takhle: unlink('./' . $_GET['file']); Ale říkám znovu - není to nijak ošetřené, nějaký zlý a ošklivý basta ... eh osoba by mohl zadat třeba soubor 'smazat.php' a ty pak spláčeš nad výdělkem. Pokud to pořád nefunguje, ověř velikost/malost písmen v názvu souboru... |
||
DarkMeni Profil |
#17 · Zasláno: 16. 6. 2011, 16:59:51
Nemá ten unlink nějaké nechtěné účinky? Mě se stává že když dám možnost, například u avataru, odstranit, pro test si to odstranim, to proběhne v pořádku ale problém nastane až když tam chci nahrát nový avatar, to se bude stránka tvářit jako že nahrává ale nakonec nic, ale upload mám snad v pořádku, a ten novej avatar se mi tam nahraje až po tom co restartuju prohlížeč, stává se to i někomu z vás? A nebo takle je to kvůli tomu unlinku?
* Když ten soubor nesmažu ale jen přepíšu (nahraju jinej obrázek se stejným jménem) tak je všechno jak má být i po několika přepsání. |
||
Rellik Profil |
#18 · Zasláno: 16. 6. 2011, 17:33:07
DarkMeni:
„ten novej avatar se mi tam nahraje až po tom co restartuju prohlížeč, stává se to i někomu z vás?“ To je celkem normální věc. Stránky na které chodíš se totiž nenačítají celé z webu, ale jsou uloženy v historii prohlížeče v tvém PC. Takže pokud nahraješ znovu něco co už tam bylo s jiným názvem, tak to nezobrazí, protože to nemůže najít. V tomto případě stačí zmáčknout kombinaci kláves Ctrl+F5 aby se stránka načetla znovu komplet celá. Většinou stačí jen F5 A pak to musí 100% zobrazit všechno co má.. |
||
Matla Profil * |
#19 · Zasláno: 16. 6. 2011, 17:54:27
Hele, fakt moc děkuju, hodně jste mi pomohli. Řešení vypadá takto:
Odkaz: echo "<a href=\"smazat.php?file=".$file."\" class=\"right negative pill button\"><span class=\"trash icon\"></span>Odstranit</a>" Zpracování: <?php $nemazat = Array("vypis.php","smazat.php","upload.php"); $i = 0; while ($i <= Count($nemazat)-1): If ($file == $nemazat[$i]) { echo "Systémový soubor <b>".$nemazat[$i]."</b> nelze smazat."; exit; //Příkaz exit ukončí běh php v tomto místě. } $i++; endwhile; $file = ( $_GET['file']); $vysledek = unlink($file); //unlink('/upload/'.$file); If ($vysledek) { echo "Soubor <b>".$file."</b> byl smazán."; }else{ echo "Sorry, soubor <b>".$file."</b> se smazat nepodařilo."; } ?> |
||
Matla Profil * |
#20 · Zasláno: 16. 6. 2011, 17:57:10
YoSarin:
OK, tohle je opravdu jen osobní sdílení souborů s přáteli a vše bude zaheslované pomocí session. |
||
YoSarin Profil |
#21 · Zasláno: 16. 6. 2011, 18:10:30
Matla:
Jen ještě malá úprava - ten while cyklus pro kontrolu systémových souborů můžeš nahradit tímhle: if (in_array($file, $nemazat)) { echo "Systémový soubor <b>" . $file . "</b> nelze smazat."; exit; //Příkaz exit ukončí běh php v tomto místě. } A kamarádi nekamarádi - pořád stačí zadat './smazat.php' a soubor zmizí :). Doporučuju nahradit řádek 15: $file = ''; if (!empty($_GET['file']) { $file = explode('/', $_GET['file']); $file = explode('\\', array_pop($file)); // tohle možná nebude nutné, ale jistota je jistota $file = array_pop($file); // teď by $file nemělo obsahovat žádnou změnu adresáře - při porovnání se soubory v $nemazat už by mělo fungovat vždy } if (empty($file)) { echo "Nezadali jste soubor ke smazání, nebo jste se pokusili zadat neplatný soubor."; exit; //Příkaz exit ukončí běh php v tomto místě. } |
||
Časová prodleva: 13 let
|
0