Kako izbrisati php datoteku koja nije izbrisana. Kako izbrisati datoteku u PHP-u? Zašto se ova funkcija zove unlink()
prije 8 godina
Izbrisali ste veliku datoteku, ali ne vidite povećanje slobodnog prostora ili smanjenje upotrebe diska? Koristite UNIX ili neki drugi POSIX OS?
Unlink() se ne odnosi na uklanjanje datoteke, radi se o uklanjanju naziva datoteke. Manpage kaže: ``unlink - izbrišite naziv i eventualno datoteku na koju se odnosi"".
Većinu vremena datoteka ima samo jedno ime -- uklanjanjem će se također ukloniti (osloboditi, osloboditi) "tijelo" datoteke (uz jedno upozorenje, vidi dolje). To je jednostavan, uobičajeni slučaj.
Međutim, "sasvim je u redu da datoteka ima nekoliko naziva (pogledajte funkciju link()), u istim ili različitim direktorijima. Sva imena će se odnositi na tijelo datoteke i `očuvati je na životu", da tako kažemo. Tek kada su sva imena uklonjena, tijelo datoteke je zapravo oslobođeno.
Upozorenje:
Tijelo datoteke *također* može biti `održano na životu' (još uvijek koristi prostor na disku) procesom koji drži datoteku otvorenom. Tijelo se neće osloboditi (neće osloboditi prostor na disku) sve dok ga proces drži otvorenim. Zapravo, postoji otmjen način oživljavanja datoteke uklonjene greškom, ali još uvijek otvorene procesom...
prije 10 godina
Radio sam na nekoj maloj probi gdje je sigurnosna kopija stvorena prije izmjene glavne tekstualne datoteke. Zatim, kada se pojavi pogreška, glavna datoteka će biti izbrisana (nepovezana) i umjesto nje će se vratiti rezervna datoteka.
Ipak, oko sat vremena razbijam glavu o tome zašto nisam mogao dobiti prava prava za prekid veze s glavnom datotekom.
Napokon sam shvatio što nije u redu: budući da sam radio na datoteci i još je nisam zatvorio, još uvijek je bila u upotrebi i naravno nije se mogla izbrisati :)
Pa sam mislio spomenuti ovo ovdje, kako bih izbjegao da drugi naprave istu pogrešku:
// Prvo zatvorite datoteku
fclose($fp);
// Zatim prekini vezu :)
prekinuti vezu ($somefile);
?>
prije 14 godina
Da biste izbrisali sve datoteke s određenom ekstenzijom, ili zapravo, izbrisali sve sa zamjenskim znakom, vrlo jednostavan način je korištenje funkcije glob. Recimo da sam htio izbrisati sve jpg-ove.........
Foreach (glob ("*.jpg" ) kao $filename ) (
echo " veličina $filename " . veličina datoteke ($filename) . "\n" ;
prekinuti vezu ($filename);
}
?>
prije 10 godina
Za svakoga tko je imao problema s pogreškom odbijenih dopuštenja, to je ponekad uzrokovano kada pokušate izbrisati datoteku koja je u mapi višoj u hijerarhiji vašeg radnog direktorija (tj. kada pokušavate izbrisati stazu koja počinje s "../").
Da biste zaobišli ovaj problem, možete koristiti chdir() za promjenu radnog direktorija u mapu u kojoj se nalazi datoteka koju želite prekinuti.
$staro = getcwd(); // Spremi trenutni direktorij
chdir($put_do_datoteke);
prekinuti vezu ($filename);
chdir ($stari); // Vrati stari radni direktorij
?>
prije 4 godine
Na OSX-u, kada se borite protiv pogreške "Permission Denied", provjerite ima li direktorij dozvole WRITE za izvršavajućeg php-korisnika.
Nadalje, ako se oslanjate na ACL-ove i želite izbrisati datoteku ili simboličku vezu, direktorij koji sadrži mora imati dopuštenje "delete_child" kako bi se poništile veze stvari unutar. Ako dodijelite "delete" samo mapi, to će vam omogućiti da izbrišete samu mapu spremnika, ali ne i objekte unutar nje.
prije 4 godine
Ovo bi se moglo činiti očiglednim, ali čupao sam kosu s ovim problemom - provjerite da se datoteka koju pokušavate izbrisati trenutno ne koristi. Imao sam skriptu koja je analizirala tekstualnu datoteku i trebala ju je izbrisati nakon dovršetka, ali stalno sam dobivala pogrešku odbijene dozvole jer nisam eksplicitno zatvorio datoteku, stoga se tehnički još uvijek "koristi" iako je analiza bila potpuna.
prije 11 godina
Gornji post Ggarciaa već ima jednu malu pogrešku, Closedir se mora koristiti čak i ako je $DeleteMe false
}
Zatvoridir($dh);
ako ($DeleteMe )(
@rmdir($dir);
}
}
?>
prije 9 mjeseci
Rukovanje pogreškom "Resurs nedostupan" pomoću unlink() kao iznimke koristeći try catch
Čak i is_file() ili file_exists() će provjeriti postoji li datoteka ili ne, postoje šanse da datoteku koriste neke aplikacije koje će spriječiti brisanje i unlink() će prikazati pogrešku "Resource Unavailable".
Dakle, nakon isprobavanja mnogih metoda kao što su: `is_resource()`, `is_writable()`, `stream_get_meta_data()`... itd., došao sam do jedinog najboljeg načina za rješavanje pogreške dok *"brišem"* datoteku koja je ili * *ne postoji** ili **postoji, ali ga koristi neka aplikacija**
funkcija delete_file($pFilename)
{
if (file_exists($pFilename)) (
// Dodao muhammad.begawala
// "@" će prestati prikazivati pogrešku "Resurs nedostupan" jer je datoteka negdje otvorena.
// "unlink($pFilename) !== true" će provjeriti je li datoteka uspješno izbrisana.
// Izdavanje iznimke kako bismo mogli jednostavno obraditi pogrešku umjesto prikazivanja korisnicima.
if(@unlink($pFilename) !== true)
throw new Exception("Nije moguće izbrisati datoteku: " . $pFilename . " Zatvorite sve aplikacije koje je koriste.");
}
vratiti istinito;
}
/* === UPOTREBA === */
pokušaj (
if(delete_file("hello_world.xlsx") === true)
echo "Datoteka izbrisana";
}
catch (Iznimka $e) (
echo $e->getMessage(); // ispisat će gore definiranu poruku o iznimci.
}
prije 11 godina
Ggarciain post iznad ima jednu malu pogrešku, zanemarit će nizove datoteka i direktorija koji su procijenjeni kao lažni (tj. "0")
Fiksni kod je ispod (false !==)
// ggarciaa na gmail dot com (04. srpnja 2007. 01:57)
// Trebao sam isprazniti direktorij, ali sam ga zadržao
// pa sam malo izmijenio prilog iz
// stefano i takys dot it (28. prosinca 2005. 11:57)
// Kratka, ali moćna rekurzivna funkcija
// to također radi ako direktoriji sadrže skrivene datoteke
// $dir = ciljni direktorij
// $DeleteMe = ako je točno, izbrišite i $dir, ako je netočno, ostavite ga na miru
Funkcija SureRemoveDir ($dir, $DeleteMe) (
if(! $dh = @ opendir ($dir )) povratak;
dok (false !== ($obj = readdir ($dh ))) (
if($obj == "." || $obj == ".." ) nastavi;
if (!@ unlink ($dir . "/" . $obj )) SureRemoveDir ($dir . "/" . $obj , true );
}
ako ($DeleteMe )(
zatvoreno ($dh);
@rmdir($dir);
}
}
//SureRemoveDir("IsprazniMe", false);
//SureRemoveDir("UkloniMe", istina);
?>
prije 8 godina
Prekidanje veze može uspjeti nakon korištenja ODBC naredbi na datoteci (u sustavu Windows).
Nininapravio trik.
Samopustio datoteku tako da se kasnije može izbrisati ...
Nastavljamo lekciju koja je posvećena temi " Rad s PHP datotekama" Ako niste pročitali prethodni, preporučam da pročitate, a za one koji su pročitali, idemo dalje. U ovoj lekciji naučit ćete kako izbrisati stvorenu ili postojeću datoteku pomoću PHP-a, kopirati ili preimenovati, zaključati datoteku.
Pa, ako ste spremni, onda idite u bitku...
Brisanje datoteke u PHP-u
Ako trebate izbrisati bilo koju datoteku, upotrijebite funkciju PHP unlink():
Prekini vezu (naziv datoteke);
Naziv datoteke – ovdje unesite naziv datoteke koju želite izbrisati.
Recimo da trebamo izbrisati datoteku “file.txt”, primjer za popunjavanje bio bi ovakav:
Prekini vezu ("datoteka.txt");
Gotov kod: