Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] unlink problem
Forum PHP.pl > Forum > Przedszkole
Hannon
Jak usunąć plik zagłębiony o dwa ?
próbowałem już chyba wszystkie możliwe mi kombinacje
  1. <?php
  2. unlink('x/x/plik.jpg');
  3. unlink('/x/x/plik.jpg);
  4. unlink('./x/x/plik.jpg);
  5. ?>

Żadne nie działa.

plik ze skryptem jest w site/admin.php
a plik który chcę usunac w site/x/x/plik.jpg
Cysiaczek
Jaki jest komunikat błędu? Takie rzeczy trzeba podać. Czy masz uprawnienia do usunięcia tego pliku?

Pozdrawiam.
Hannon
Warning: unlink(appz_info/tyu.txt) [function.unlink]: No such file or directory in /mat/admin.php on line 317

Linia 317 to właśnie ta z unlink.

I tak, uprawnienia są ustawione na 777 z desperacji tongue.gif
krzysiekk
witam moze trzeba tak zrobic
  1. <?php
  2. unlink('/usr/local/apache/www/htdocs/nazwa serwisu/folder z plikiem do usuniecia/xx.jpg');
  3. ?>
Prym
hmm a probowales podac mu w unlinku scizke z mat?

czyli unlink('mat/x/x/xxx.jpg');
Hannon
Oba sposoby nie działają... nawet facet z pomocy na home.pl nie moze mi odpowiedzieć co jest nie tak i czemu to nie działa tongue.gif
Prym
a to na homie?! tez mmam tam aktualnie problemy ze strona klienta - wlasnie sie dowiedzialem ze oni niemaja serwerow na apachu i polowa funkcji apachowych nie dziala sad.gif

oczywiscie to ze w 1 poscie nie zamknales apostrofow to tylko tak tuta napisales smile.gif

sproboj moze z cofnieciem sie o jeden poziom ? (moze cos ze struktura katalogowa im sie tez posypalo
unlink('../x/x/plik.jpg');
krzysiekk
wez stworz w katalogu z pilkiem do usuniecia plik index.php a w nim wpisz
  1. <?php
  2. print_r($_SREVER);
  3. ?>

i zobaczysz w jakim katalogu jestes a potem to juz zrobisz unlink
Hannon
Krzysiekk - droga do pliku jest taka sama jaką unlinkowi podaje skrypt.
http://www.domain.pl/mat/prog/img/check.php <-

Prym - nadal nic tongue.gif

Warning: unlink(../mat/prog/img/14.JPG ) [function.unlink]: No such file or directory in /mat/admin.php on line 316
Na ftp wyraźnie widze że ten plik tam jest.
itsme
widocznie nie ma tam pliku lub tez php tego pliku nie widzi ...
Hannon
@itsme - nie obraź się ale odkrywcze to to nie było. ^^ z angielskiego tłumaczyć jeszcze umiem i troche mózgu mimo wszytko po latach mi zostało.
Pytam czy ktoś może nie wie jak to naprawić/ominąć/rozwiązać.

Najrozsądniejszym rozwiązaniem jest to że unlink dostaje złą ścieżkę, ale próbowałem multum opcji z slashami, bez, z kropkami, wielokropkami i innym padłem ale nie działa. Zatem - pomysły ?
itsme
czasami najprostrze rowiązania sa w najprosztych odkryciach.
bez urazy ale nie potrafisz nawet prawidłowo podać ścieżkę ... żenuaaa :-)

print $sSciezka.$sPlik;

wynik wklei do klienta ftp i zobacz co CI sie pojawi

druga opcja przeklei ścieżkę z klienta ftp do skryptu php.
Hannon
Nie specjalnie wiem o co Ci chodzi z tym
print $sSciezka.$sPlik;
ale tamto drugie nie działa - tzn. przeklejenie ścieżki z klienta ftp.
krzysiekk
witam moze posluchaj mnie chyba ze juz to zrobiles to wybacz
wyswietl sobie ta sciezke do tego katalogu przy uzyciu tego jak to wstawisz do katlogu w plikami do usunieci ato ci cos podobnego da
"/var/www/html/pro/xx/xx/xx/index.php" i to jest sciezka do pliku na serwerze
  1. <?php
  2. print_r($_SERVER);
  3. ?>

a dokladnie potrzebujesz
$_SERVER[SCRIPT_FILENAME]
Hannon
SCRIPT_URI http://www.domain.pl/mat/prog/img/phpinfo.php
DOCUMENT_ROOT /


Well. To jest to co mi pokazuje document root. "/"
Niespecjalnie mi to mówi cokolwiek.

Wesoło. W pliku w którym jest samo unlink wszystko działa pięknie !
Tylko w tym w którym teraz grzebie jest voodoo i nie chce zobaczyć pliku.
b_chmura
w pliku z unlink wsatw:
  1. <?php
  2. echo getcwd() . "\n";
  3. ?>

i sprawdz w jakim katalogu sie znajdujesz, z taką wiedzą z pewnością będziesz potrafił ustalić swoją ścieżkę do pliku
Hannon
Ale to moim zdaniem nie jest kwestia scieżki dostępu do pliku.
Bo skoro przy takiej samej ścieżce, dwa pliki ze skryptem, jeden z jedną linią :
  1. <? unlink("prog/img/plik.jpg"); ?>

gdzie wszystko działa pięknie.
a w drugim z skryptem nieco dłuższym about 350linii
i taką samą komendą z tym samym parametrem jak w poprzednim pliku
i tu NIE DZIAŁA.

To to chyba nie jest kwestia ścieżki do pliku. Podkreślam że oba skrypty są w tym samym katalogu.
Z czego w jednym ta komenda działa, zaś w drugim nie.
b_chmura
może w pozostałych liniach kodu zmieniacz katalog roboczy (chdir" title="Zobacz w manualu PHP" target="_manual)
Lion_87
no skoro to nie problem polecenia to widocznie gdzieś w skrypcie problem tkwi
Hannon
Nie, nie używałem takiej komendy, a całego skryptu nie będę wrzucał bo to pomniejszy gigant, wrzuce tylko dany if bo w danym momencie tylko tą skrypt wykonuje.
  1. <?php
  2. if($_SESSION['admin_dost'] == TRUE && $_GET['tab'] = "usun" && isset($_GET['clear']))
  3.  {
  4.  if($_GET['clear'] == "1"){$nazwa_plikua = "lista_klienci.txt";}
  5.  if($_GET['clear'] == "2"){$nazwa_plikua = "lista_nomadsoft.txt";}
  6. if($_GET['clear'] == "3"){$nazwa_plikua = "lista_inst.txt";}
  7. if($_GET['clear'] == "4"){$nazwa_plikua = "lista_crew.txt";}
  8.  
  9. $nazwa_pliku1 = "appz_info/".$_POST['usun'].".txt";
  10. $uchwyt1 = fopen($nazwa_pliku1, "r");
  11. $srodek_appza = fread($uchwyt1, filesize($nazwa_pliku1));
  12. fclose($uchwyt1);
  13. list($noa ,$loa , $ooa ,$woa, $uoa) = explode(":<br>:", $srodek_appza);
  14. $uoa = trim($uoa);
  15.  $filz = basename($uoa);
  16.  $filx = basename($loa);
  17.  
  18.  unlink("prog/".$filz);
  19.  unlink("prog/img/".filx); /* felerna linia*/
  20.  unlink("appz_info/".$_POST['usun'].".txt");
  21.  echo $nazwa_plikua;
  22.  $handle = fopen($nazwa_plikua,"r+");
  23.  $inside = fread($handle,filesize($nazwa_plikua));  
  24.  $inside = explode("#|#",$inside);
  25.  $key = array_search($_POST['usun'],$inside);
  26.  unset($inside[$key]);
  27.  $srodek = implode("#|#",$inside);
  28.  echo "<br>".$srodek."<br>";
  29.  fwrite($nazwa_plikua,$srodek);
  30.  fclose($handle);
  31.  
  32.  echo"Plik został pomyślnie usunięty";
  33.  }
  34. ?>


Marginsem implode nie chce działać niewiem czemu. Może komuś wpadnie coś do głowy.

Ok... już wiem co było powodem chociaż nie specjalnie wiem czemu basename to zostawiło. Na końcu zmiennych $filz i $filx była spacja.
Wydawało mi się że basename(); powinno mi wyczyścić samą nazwę pliku z obu stron. trim(); załatwiło sprawę.

Dziękuję wszystkim za pomysły i chęć pomocy smile.gif Temat to zamknięcia.
elnino17
Witam, co jest nie tak w tym kodzie, że plik nie chce sięusunąć ?
  1. <?php
  2. $dir = dir('../app-disc/upload files');
  3. while ($file = $dir->read())
  4. if ($file != '.' && $file != '..')
  5. echo '<br/><table><tr><td class="file_list">' . $file . '</td>' .
  6. '<td class="file_list"><a href="../app-disc/upload files/' . $file . '">Pobierz</a></td>' .
  7. '<td class="file_list"><a href="'. unlink('$DOCUMENT_ROOT/../app-disc/upload files/'. $file) . '">Usuń</a><br /></td>'
  8. . '</tr></table>';
  9. $dir->close();
  10. ?>
Turson
<a href="'. unlink('$DOCUMENT_ROOT/../app-disc/upload files/'. $file) . '">Usuń</a>
o matko
albo usuwasz od razu, albo tworzysz link do usunięcia i po wejściu na link usuwasz
elnino17
Zrobiłem tak i też nie działa,
  1. <a href="$DOCUMENT_ROOT/../app-disc/upload files/'.unlink($file).'">

Chce żeby wszystkie operacje, dodawania(działa), pobierania(działa) i usuwania(nie działa) pliku(.img), były wykonywane na jednym pliku php. To usuwanie zrobiłem analogicznie do dwóch poprzednich funkcjonalności i nie wiem co jest nie tak.
b4rt3kk
Jak to co jest nie tak? Wszystko. Atrybut href nie może być funkcją PHP. Zastosowanie czegoś takiego jak Ty napisałeś powoduje odpalenie funkcji unlink za każdym razem, gdy kod jest wykonywany, nie w momencie kliknięcia w link. No i skoro mówisz że nie działa, to i tak masz coś nie tak z tą funkcją. Włącz wyświetlanie błędów.

Poza tym, w pojedyńczych ciapkach nie otrzymujesz wartości zmiennej, tylko tekst. Musisz poprawić:

  1. unlink($DOCUMENT_ROOT . '/../app-disc/upload files/'. $file)
elnino17
Zrobiłem to inaczej, zmienna się prawidłowo przesyła(prawidłowa nazwa i rozszrzenie) ale nie usuwa pliku do niej przypisanego.

  1. <?php
  2. ...
  3. .'<form action="delete_file.php" method="post">'
  4. . '<input type="hidden" name="file" value="' . $file . '">'
  5. . '<input type="submit" value="usuń">'
  6. . '</form>'
  7. ...
  8. ?>


  1. <?php
  2. $file = $_POST['file'];
  3. unlink($file);
  4. if (!$file) {
  5. echo 'zmienna ' . $file . ' została usunięta';
  6. } else {
  7. echo 'zmianna ' . $file . ' nie została usunięta';
  8. }
  9. ?>
Turson
wcześniej podawałeś ścieżkę $DOCUMENT_ROOT/../app-disc/upload files/ a tu jej nie ma
elnino17
Poprawiłem lecz dalej nie usuwa

delete_file.php
  1. <?php
  2. $file = $_POST['file'];
  3. unlink($DOCUMENT_ROOT.'/../app-disc/upload files/'.$file);
  4. if(!$file){
  5. echo 'zmienna '.$file.' została usunięta';
  6. }else{
  7. echo 'zmianna '.$file.' nie została usunięta';
  8. }
  9. ?>


Podnosze smile.gif
Turson
Źle sprawdzasz czy usunięto. Sprawdzaj unlink a nie $file, który jest zmienną facepalmxd.gif
  1. $file = $_POST['file'];
  2. if(unlink($DOCUMENT_ROOT.'/../app-disc/upload files/'.$file)){
  3. echo 'zmienna '.$file.' została usunięta';
  4. }else{
  5. echo 'zmianna '.$file.' nie została usunięta';
  6. }
b_chmura
  1.  
  2. // Ścieżka do katalogu z plikami
  3. $dir = "{$DOCUMENT_ROOT}/../app-disc/upload files/";
  4.  
  5. // Nazwa pliku pobrana z POST. Koniecznie przefiltruj odbierane dane.
  6. $fileName = $_POST['file'];
  7.  
  8. // Sprawdzasz czy plik istnieje.
  9. if (file_exists($dir . $fileName)) {
  10. // Jeśli tak:
  11. // Usuwasz plik i sprawdzasz czy wszystko w porządku.
  12.  
  13. if (unlink($dir . $fileName)) {
  14. //Jeśli tak:
  15.  
  16. echo "Plik '{$fileName}' został usunięty";
  17. } else {
  18. //Jeśli nie:
  19.  
  20. echo "Wystąpił błąd podczas usuwania pliku '{$fileName}'!";
  21. }
  22.  
  23. } else {
  24. // Jeśli plik nie istnieje na serwerze
  25.  
  26. echo "Plik '{$fileName}' nie istnieje!";
  27. }
elnino17
Dzięki za pomoc ale sam rozwiązałem problem smile.gif
  1. $file = '../app-disc/upload files/'.filter_input(INPUT_POST, 'file');
  2. unlink($file);
  3. ...

nospor
Pozbycie sie IFa, ktory generowal info o poprawnym lub niepoprawnym skasowaniu, ciezko nazwac rozwiązaniem problemu.... No, ale każdy ma inne gusta.
elnino17
Nie chodzi o if'a, chodzi o ten:
  1. .filter_input(INPUT_POST, 'file')

kawałek kodu, bez niego nie odnajdywało pliku a co za tym idzie nie mogło go usunąć, z if'ami jest wszystko ok i wszystko działa poprawnie smile.gif
nospor
No jesli zostawiles IFy jak na poczatku:
if (!$file) {

echo 'zmienna ' . $file . ' została usunięta';

} else {

echo 'zmianna ' . $file . ' nie została usunięta';

}

To nie, z IFami nie jest wszystko wporządku smile.gif
elnino17
Mam nadzieje, że teraz wszystkich zadowoliłem wink.gif
  1. $file = '../app-disc/upload files/'.filter_input(INPUT_POST, 'file');
  2. $delfile = unlink($file);
  3. if($delfile){
  4. echo 'Plik '.$file.' został usunięty';
  5. }else{
  6. echo 'Plik '.$file.' nie został usunięty';
  7. }
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.