Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd generowany przez unlink
Forum PHP.pl > Forum > PHP
kowalczyk
Witam, mam taki kawałek kodu:

  1. <?php
  2. for ($i=1; $i<31; $i++) {
  3. $male="../gallery/".$folder."/".$plik;
  4. $duze="../gallery/".$folder."/duze/".$plik;
  5. if (unlink ($male)) {
  6.  unlink ($duze);
  7.  echo "<br>zdjęcie ".$plik." zostało usunięte";
  8. }
  9. else echo "Operacje na pliku ".$male." nie powiodła się";
  10. }
  11. ?>


Po wywołaniu funkcja usuwa kilka zdjęć, ale nigdy nie usuwa ostatniego. Gdy tylko jedno ma być skasowane, to operacja również się nie powiedzie.

Otrzymujemy taki komunikat: Warning: unlink(../gallery/nazwa_galerii/duze/dsc8.jpg ) [function.unlink]: No such file or directory.

Oczywiście plik taki istnieje i ma chmod 777. Zaznaczam, że wszystkie pliki są kasowane poza ostatnim.
Naprawdę nie mam pojęcia, odnośnik do zdjęcia jest oczywiście prawidłowy i to zdjęcie istnieje.

Z góry dziękuję za pomoc!
kossa
zacznij od $i=0 w pętli for

błąd który otrzymujesz oznacza że nie znaleziono pliku lub katalogu

Lukasz

p.s.
a w ogóle to skąd się biorą Tobie nazwy plików - tzn. po co Tobie pętla jeśli masz cały czas w zmiennych np. $plik tę samą wartość? bo w pętli jej nie zmieniasz
kowalczyk
Pełna pętla wygląda następująco:
  1. <?php
  2. for ($i=1; $i<31; $i++) {
  3. $nazwa='delfile'.$i;
  4. $plik=${$nazwa};
  5. if ($plik!="") {
  6. $dir="../gallery/".$folder."/".$plik;
  7.  $duze="../gallery/".$folder."/duze/".$plik;
  8.  if (unlink ($dir)) {
  9. unlink ($duze);
  10. echo "<br>zdjęcie ".$plik." zostało usunięte";
  11.  }
  12.  else echo "Operacje na pliku ".$dir." nie powiodła się <img src='$dir'>";
  13. }
  14.  }
  15. ?>


Nazwy zdjęć zaczynają się od 1 (dsc1.jpg), tak więc $i nie musi rozpoczynać się o wartości 0.
Poza tym kasowane są zdjęcia, np. gdy przekazuję nazwy 4 zdjęć do skasowania to zostają skasowane dsc1.jpg; dsc4.jpg; dsc7.jpg, ale ostatnie zdjęcie o przykładowej nazwie dsc9.jpg już nie zostanie skasowane.

Oczywiście plik znajduje się w katalogu i ma chmod 777.
sebik
czy aby napewno wykonujesz petle tyle razy ile masz plikow, np. dla 4 : for($i=1;$i<=4;$i++)
kowalczyk
Cytat(sebik @ 9.01.2007, 00:40:19 ) *
czy aby napewno wykonujesz petle tyle razy ile masz plikow, np. dla 4 : for($i=1;$i<=4;$i++)


Nie, oczywiście, że nie. Zmienię warunek tego for'a, jak na razie wstawiłem if'a sprawdzającego czy zmienna ma wartość: if ($plik!="") aby nie wykonywał unlinka gdy jest on niepotrzebny. Ale to nie powinno mieć najmniejszego znaczenia.

Dla rozwiania wątpliwości robię coś takiego:
  1. <?php
  2. unlink ($dir);
  3. echo "<img src='".$dir."'>";
  4. ?>

Zdjęcie się wyświetla, ale funkcja unlink ($dir) zwraca false z informacją, że nie ma takiego pliku.
thornag
O ile sie nie myle dla unlink() nalezy podac sciezke absolutna, co oznacza ze zdjecie jak najbardziej sie wywola ze sciezka ../images/zdjecie.jpg, ale unlink potrzebuje absolutnej typu /var/www/images/zdjecie.php

Sprobuj jak mowilem.
kowalczyk
Cytat(thornag @ 9.01.2007, 10:31:30 ) *
O ile sie nie myle dla unlink() nalezy podac sciezke absolutna, co oznacza ze zdjecie jak najbardziej sie wywola ze sciezka ../images/zdjecie.jpg, ale unlink potrzebuje absolutnej typu /var/www/images/zdjecie.php

Sprobuj jak mowilem.


Ale to nie wyjaśnia dlaczego kilka zdjęć jest kasowanych, a tylko ostatnie nie jest.
Jeżeli chodzi o funkcję unlink z tego wnioskuję, że moje odwołanie jest prawidłowe.

Dobra, przepraszam wszystkich - znalazłem błąd. Przy przesyłaniu zmiennych doklejało się %20 na samym końcu. Usunąłem spację i po kłopocie. Linijka 11 i 12.
  1. <?php
  2. echo "<br>
  3.  <a HREF='index.php?tresc=galdelgal&id=".$folder;
  4.  for ($i=1; $i<31; $i++) {
  5. $nazwa='delfile'.$i;
  6. $plik=${$nazwa};
  7. if ($plik!="") {
  8.  echo "&delfile".$i."=".$plik;
  9. }
  10.  }
  11.  echo "
  12.  &del=3'>TAK</A>
  13.  |
  14.  <a HREF='index.php?tresc=galwysone&id=".$folder."&edit=1'>NIE</A>";
  15. }
  16. ?>


Mimo to dziękuję za pomoc.
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.