Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] usuwanie plików
Forum PHP.pl > Forum > Przedszkole
fredzio90
mam uplaoder który wysła pliki ( wiadomo ) i zrobiłem do niego panel admina.... w pliku panelu admina mam taką funkcje:

  1. <?php
  2. function del() {
  3. global $file_host_tbl, $PHP_SELF, $id;
  4.  
  5. $sql = mysql_query("SELECT * FROM $file_host_tbl WHERE id='$id'");
  6. $r = mysql_fetch_array($sql);
  7.  
  8. $nazwa_pliku = $r['nazwa_pliku'];
  9. $kat = $r['katalog'];
  10.  
  11.  
  12. $lokalizacja = '/uploads/files/'.$kat.'/'.$nazwa_pliku;
  13. $usuwanie = unlink($lokalizacja);
  14.  
  15. $dell = mysql_query("DELETE FROM $file_host_tbl WHERE id='$id'");
  16.  
  17. }
  18. ?>


i jak klikam przy pliku w link Usuń, to usuwa podany wpis z bazy ale nie usuwa pliku z serwera... pojazwia się taki błąd:


Kod
Warning: unlink() [function.unlink]: open_basedir restriction in effect. File(/uploads/files/7f4b355cfc/plik.txt) is not within the allowed path(s): (/home/XXX/XXX:/tmp) in /home/XXX/XXX/public_html/admin/hosting.adm.php on line 132




linia 132 to jest właśnie ta linia:
  1. <?php
  2. $usuwanie = unlink($lokalizacja);
  3. ?>


w polu katalog zapisywana jest przykłądowo taka wartość:
7f4b355cfc

a w polu nazwa_pliku jest takie cuś :
plik.txt

i jak można to naprawić... chodzi mi tutaj o usuwanie podanego folderu 7f4b355cfc z zawartością, czyli wraz z plikiem plik.txt
plisek
kiedys miałem podobnie, wystarczyło w pliku php.ini zdjąć restrykcje dotyczącą wyłączył restrykcję open_base_dir i umozliwić zapisywanie, w tym i usuwanie z podenego katalogu
pozdr

ps
poczytaj tez w manualu
fredzio90
no dobra.. ale przeciez niewiem. spytam admina serwa mojego to chyba nie wyłączy czy tam właczy te open_basedir.....

niema innego sposobu na usunięcie tego folderu questionmark.gif
matty7
1. sprawdz dokladnie sciezke do usunietego pliku
2. jesli to jest na serwerze zewnetrznym(takie cus jak ovh, piwko i takie tam) to sprawdz czy CHMOD jest ustawiony na 644 (chyba)
3. folder nie usunie sie sam - rmdir()
fredzio90
sprubuje ale obawiam sie ze usune cały katalog ścieżki głównej czyli:

Kod
uploads/files/


czyli według ciebie powinno być:

  1. <?php
  2. $lokalizacja = '/uploads/files/'.$kat;
  3. $usuwanie = rmdir($lokalizacja);
  4. ?>


ale poleceniem rmdir nie można usunąć folderu który zawiera w sobie jakiś plik....
Ociu
Za pewne coś w katalogu jest. Pierwszy komentarz:
  1. <?php
  2. /**
  3.  * Removes the directory and all its contents.
  4.  *
  5.  * @param string the directory name to remove
  6.  * @param boolean whether to just empty the given directory, without deleting th
    e given directory.
  7.  * @return boolean True/False whether the directory was deleted.
  8.  */
  9. function deleteDirectory($dirname,$only_empty=false) {
  10. if (!is_dir($dirname))
  11. return false;
  12. $dscan = array(realpath($dirname));
  13. $darr = array();
  14. while (!empty($dscan)) {
  15. $dcur = array_pop($dscan);
  16. $darr[] = $dcur;
  17. if ($d=opendir($dcur)) {
  18. while ($f=readdir($d)) {
  19. if ($f=='.' || $f=='..')
  20. continue;
  21. $f=$dcur.'/'.$f;
  22. if (is_dir($f))
  23. $dscan[] = $f;
  24. else
  25. unlink($f);
  26. }
  27. closedir($d);
  28. }
  29. }
  30. $i_until = ($only_empty)? 1 : 0;
  31. for ($i=count($darr)-1; $i>=$i_until; $i--) {
  32. echo "nDeleting '".$darr[$i]."' ... ";
  33. if (rmdir($darr[$i]))
  34. echo "ok";
  35. else
  36. echo "FAIL";
  37. }
  38. return (($only_empty)(count(scandir)<=2) : (!is_dir($dirname)));
  39. }
  40. ?>
fridek
Hmm, do jakiego folderu uploadujesz pliki?
Przecież możesz robić to do swojego domowego, a później usuwać
/home/XXX/XXX/public_html/upload/nazwa_pliku
Wiesz, nie dziwie się Twojemu adminowi że nie pozwala na usuwanie plików po całej strukturze katalogów...
fredzio90
ociu ja mam taką funkcje biggrin.gif :

  1. <?php
  2. function rmdirtree($dirname) {
  3. if (is_dir($dirname)) { //Operate on dirs only
  4. $result=array();
  5. if (substr($dirname,-1)!='/') {$dirname.='/';} //Append slash if necessary
  6. $handle = opendir($dirname);
  7. while (false !== ($file = readdir($handle))) {
  8. if ($file!='.' && $file!= '..') { //Ignore . and ..
  9. $path = $dirname.$file;
  10. if (is_dir($path)) { //Recurse if subdir, Delete if file
  11. $result=array_merge($result,rmdirtree($path));
  12. }else{
  13. unlink($path);
  14. $result[].=$path;
  15. }
  16. }
  17. }
  18. closedir($handle);
  19. rmdir($dirname); //Remove dir
  20. $result[].=$dirname;
  21. return $result; //Return array of deleted items
  22. }else{
  23. return false; //Return false if attempting to operate on a file
  24. }
  25. }
  26. ?>


i usuwam tak:
  1. <?php
  2. $sql = mysql_query("SELECT * FROM $file_host_tbl WHERE id='$id'");
  3. $r = mysql_fetch_array($sql);
  4.  
  5. $nazwa_pliku = $r['nazwa_pliku'];
  6. $kat = $r['katalog'];
  7.  
  8.  
  9. $lokalizacja = '/uploads/files/'.$kat;
  10. $usuwanie = rmdirtree($lokalizacja);
  11. ?>


ale wywala błędem:


Kod
Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/uploads/files/586156e531) is not within the allowed path(s): (/home/XXX/XXX:/tmp) in /home/XXX/XXXX/public_html/admin/hosting.adm.php on line 140


PS. ja zrobiłem uploader ktory wysyła pliki do folderów wczesniej automatycznie utworzonych.. nie do jednego katalogu... w kazdym katalogu jeden plik... coś ala rapidshare
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.