Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie plików z foldera
Forum PHP.pl > Forum > PHP
AuronDiel
Witam wszystkich! Skrypt miał za zadanie wypisywać pliki znajdujące się w folderze i dawać opcje (button) dzięki której można przy okazji można usunąć ten plik.
Wszystko zapowiadało się łatwo i przyjemnie lecz po wciśnieciu klawiszu "Skasuj" plik dalej istnieje.
Proszę o pomoc!
  1. <?php
  2. $Katalog = 'sc/jp';
  3. if($_GET['usun_plik'] != "")
  4. {
  5. unlink('sc/jp/' . $_GET['usun_plik']);
  6. }
  7. $KatalogEdycja = opendir('sc/jp);
  8.  
  9. while($PlikZKatalogu = readdir($KatalogEdycja))
  10. {
  11. if($PlikZKatalogu != '.' && $PlikZKatalogu != '..' &&
  12. !is_dir('sc/jp/' .$PlikZKatalogu))
  13. {
  14. $pathinfo = pathinfo('sc/jp/'.$PlikZKatalogu);
  15. echo'<a href="sc/jp/'.$PlikZKatalogu.'"><font color="#c4c4c4" size="5">'.$pathinfo['filename'].'</font></a>
  16. <a href="index.php?usun_plik='.$PlikZKatalogu.'"><button>Skasuj</button></a><hr size="1" color="gray">';
  17. }
  18. }
  19. closedir($KatalogEdycja);
  20. ?>
redeemer
Brakuje apostrofa w linii 7.

Możliwe że proces serwera http nie ma praw do tego pliku, który chcesz usunąć. Powinieneś dostać warning w stylu
Kod
Warning: unlink(sc/jp/test.txt) [function.unlink]: Permission denied in ...

Masz włączone wyświetlanie błędów?

Do tego przydała by się walidacja $_GET['usun_plik']. Dla przykładu mógłbym wejść pod taki adres: index.php?usun_plik=../../index.php
AuronDiel
W .htaccess dopisałem php_flag display_errors on
Nic nie wypisało.
Dodałem też apostrof, dalej nie działa.
toaspzoo
A katalog oraz pliki mają nadany odpowiedni chmod ? rolleyes.gif
AuronDiel
Nie ustawiałem chmod, ale wątpie by to było to.
Shido
Z trafieniem w katalog zawsze mam problemy.
Spróbuj dać taką lokalizację:
  1. unlink('./sc/jp/' . $_GET['usun_plik']);
redeemer
Zamiast unlink daj:
  1. $filename = './sc/jp/' . $_GET['usun_plik'];
  2. var_dump(posix_getpwuid(fileowner($filename)));
  3. var_dump(posix_getgrgid(filegroup($filename)));
  4. var_dump(substr(sprintf('%o', fileperms($filename)), -4));

I pokaż co zwraca.
AuronDiel
Cytat(Shido @ 19.07.2012, 08:56:20 ) *
Z trafieniem w katalog zawsze mam problemy.
Spróbuj dać taką lokalizację:
  1. unlink('./sc/jp/' . $_GET['usun_plik']);


Warning: unlink(./sc/jp/gghg.php) [function.unlink]: No such file or directory in /home/dawtuz/domains/y.pl/public_html/jp2.php on line 33


Cytat(redeemer @ 19.07.2012, 09:19:35 ) *
Zamiast unlink daj:
  1. $filename = './sc/jp/' . $_GET['usun_plik'];
  2. var_dump(posix_getpwuid(fileowner($filename)));
  3. var_dump(posix_getgrgid(filegroup($filename)));
  4. var_dump(substr(sprintf('%o', fileperms($filename)), -4));

I pokaż co zwraca.


Warning: fileowner() [function.fileowner]: stat failed for ./sc/jp/gghg.php in /home/dawtuz/domains/y.pl/public_html/jp2.php on line 34
array(7) { ["name"]=> string(4) "root" ["passwd"]=> string(1) "x" ["uid"]=> int(0) ["gid"]=> int(0) ["gecos"]=> string(4) "root" ["dir"]=> string(5) "/root" ["shell"]=> string(9) "/bin/bash" }
Warning: filegroup() [function.filegroup]: stat failed for ./sc/jp/gghg.php in /home/dawtuz/domains/y.pl/public_html/jp2.php on line 35
array(4) { ["name"]=> string(4) "root" ["passwd"]=> string(1) "x" ["members"]=> array(1) { [0]=> string(4) "root" } ["gid"]=> int(0) }
Warning: fileperms() [function.fileperms]: stat failed for ./sc/jp/gghg.php in /home/dawtuz/domains/y.pl/public_html/jp2.php on line 36
string(1) "0"


Takie błedy zwraca sad.gif
Pilsener
Bo zacząć trzeba od tego, że jak chcesz coś usunąć, to trzeba sprawdzić:
1. Czy to coś istnieje
2. Czy mam odpowiednie prawa
3. Teraz spróbować usunąć
4. Sprawdzić informację zwrotną

Jak się nie chce sprawdzać, to potem ma się problemy tego typu. Bo trzeba zacząć od:
  1. if(file_exists('sc/jp/' . $_GET['usun_plik'])){
  2.  
  3. //robię dalej
  4.  
  5. }else{
  6.  
  7. echo 'nie znaleziono pliku '.'sc/jp/' . $_GET['usun_plik']);
  8.  
  9. }


Bo potem można wątpić, czy to uprawnienia, czy zła ściezka, czy brak pliku czy inny problem?

I tak przy okazji - nie boisz się, że Ci ktoś pousuwa nie to co trzeba?

toaspzoo
Wspominałem o chmodach, ale autor wolał to olać, sądząc, że przyczyna nie może być tak prosta cool.gif
AuronDiel
To w takim razie jaki mam ustawic chmod I ktorego pliku?
!*!
Cytat(AuronDiel @ 20.07.2012, 11:45:34 ) *
To w takim razie jaki mam ustawic chmod I ktorego pliku?


chmod

Tego co chcesz usunąć (dla pliku/katalogu).
AuronDiel
  1. <?php
  2. $Katalog = 'sc/jp';
  3. if($_GET['usun_plik'] != "")
  4. {
  5. unlink('sc/jp/' . $_GET['usun_plik']);
  6. {
  7. if(file_exists('sc/jp/' . $_GET['usun_plik']));
  8. }
  9. $KatalogEdycja = opendir('sc/jp');
  10.  
  11. while($PlikZKatalogu = readdir($KatalogEdycja))
  12. {
  13. if($PlikZKatalogu != '.' && $PlikZKatalogu != '..' &&
  14. !is_dir('sc/jp/'.$PlikZKatalogu))
  15. {
  16. chmod($PlikZKatalogu,0755);
  17. echo'<a href="sc/jp/'.$PlikZKatalogu.'"><font color="#c4c4c4" size="5">'.$PlikZKatalogu.'</font></a>
  18. <a href="jp2.php?usun_plik='.$PlikZKatalogu.'"><button>Skasuj</button></a><hr size="1" color="gray">';
  19.  
  20. }
  21. }
  22. }
  23. else{
  24. echo ' nie znaleziono pliku '.('sc/jp/' . $_GET['usun_plik']);
  25. }
  26. closedir($KatalogEdycja);
  27. ?>


A o to co wypluło:
nie znaleziono pliku sc/jp/
Warning: closedir(): supplied argument is not a valid Directory resource in /home/dawtuz/domains/y.pl/public_html/jp2.php on line 54
!*!
Jak nie znaleziono, to nie znaleziono. To chyba jasne. Podaj ścieżkę bezwzględną do katalogu.
toaspzoo
czyli /sc/jp jeśli masz przeciętny hosting/serwer to jest to katalog główny www
darko
Fajnie i wydajnie wyglądałby Twój kod, gdybyś użył rekursywnego iteratora dla floderów: http://php.net/manual/en/class.recursivedi...oryiterator.php
zobacz zwłaszcza komentarze
AuronDiel
Cytat(darko @ 20.07.2012, 21:07:16 ) *
Fajnie i wydajnie wyglądałby Twój kod, gdybyś użył rekursywnego iteratora dla floderów: http://php.net/manual/en/class.recursivedi...oryiterator.php
zobacz zwłaszcza komentarze


Jak na razie to jest dla mnie czarna magia, może kiedyś. Powiem wam Panowie smile.gif)
Napisałem jeszcze raz skrypt od nowa, troche pozmieniałem i... działa.. ohmy.gif

By skrypt działał to trzeba być zalogowanym i skrypt dotyczy tylko plików znajdujących się w folderze "jp" a tam są same śmiecie.

Dziękuje wszystkim za pomoc! smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.