Kako izbrisati php fajl koji nije izbrisan. Kako izbrisati fajl 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 drugi POSIX OS?

Unlink() se ne odnosi na uklanjanje datoteke, već na uklanjanje naziva datoteke. Man stranica kaže: ``unlink - izbrišite ime 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, pogledajte dolje). To je jednostavan, uobičajen slučaj.

Međutim, "sasvim je u redu da datoteka ima nekoliko imena (pogledajte funkciju link()), u istim ili različitim direktorijumima. Sva imena će se odnositi na tijelo datoteke i `održavati ga živim", da tako kažem. Tek kada se sva imena uklone, tijelo datoteke se zapravo oslobađa.

upozorenje:
Tijelo datoteke može *takođe* biti `održano u životu" (i dalje 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. U stvari, postoji otmjen način da oživite datoteku koja je uklonjena greškom, ali je još uvijek otvorena procesom...

prije 10 godina

Radio sam na malom pokušaju gdje je napravljena rezervna kopija prije modifikacije glavnog tekstualnog fajla. Zatim, kada se pojavi greška, glavna datoteka će biti izbrisana (nepovezana) i umjesto toga će biti vraćena rezervna datoteka.

Mada, razbijam glavu oko sat vremena zašto nisam mogao da dobijem prava da uklonim vezu sa glavnim fajlom.

Konačno sam znao šta nije u redu: jer sam radio na fajlu i još nisam zatvorio fajl, još uvek je bio u upotrebi i naravno nije se mogao izbrisati :)

Pa sam mislio da ovo spomenem ovdje, da izbjegnem da drugi naprave istu grešku:

// Prvo zatvorite datoteku
fclose($fp);

// Onda prekini vezu :)
prekinuti vezu ($somefile);
?>

prije 14 godina

Da biste izbrisali sve datoteke određene ekstenzije, ili u stvari, izbrisali sve pomoću zamjenskog znaka, vrlo jednostavan način je korištenje funkcije glob. Recimo da sam htela da obrišem sve jpg...

Foreach (glob ("*.jpg") kao $filename) (
echo " $filename size " . veličina datoteke ($filename) . "\n" ;
prekinuti vezu ($filename);
}

?>

prije 10 godina

Za svakoga ko je imao problem sa greškom uskraćenih dozvola, to je ponekad uzrokovano kada pokušate da izbrišete datoteku koja se nalazi u folderu koji je viši u hijerarhiji vašeg radnog direktorija (tj. kada pokušavate da izbrišete putanju koja počinje sa "../").

Dakle, da biste zaobišli ovaj problem, možete koristiti chdir() da promijenite radni direktorij u mapu u kojoj se nalazi datoteka koju želite prekinuti.

$old = getcwd(); // Spremite trenutni direktorij
chdir($path_to_file);
prekinuti vezu ($filename);
chdir ($old); // Vraćamo stari radni direktorij
?>

prije 4 godine

Na OSX-u, kada se borite protiv greške "Permission Denied", uverite se da direktorijum ima WRITE dozvole za php-korisnika koji izvršava.

Nadalje, ako se oslanjate na ACL-ove i želite da izbrišete datoteku ili simboličku vezu, direktorij koji sadrži mora imati dozvolu "delete_child" kako bi prekinuo vezu stvari unutar. Ako dodijelite samo "delete" folderu koji će vam omogućiti da izbrišete samu mapu kontejnera, ali ne i objekte unutar.

prije 4 godine

Ovo bi moglo izgledati očigledno, ali čupao sam kosu zbog ovog problema - uvjerite se da se datoteka koju pokušavate izbrisati trenutno ne koristi. Imao sam skriptu koja je raščlanjivala tekstualnu datoteku i trebala ju je izbrisati nakon završetka, ali je nastavila dobivati ​​grešku odbijene dozvole jer nisam eksplicitno zatvorio datoteku, stoga se tehnički još uvijek "koristio" iako je raščlanjivanje bilo kompletan.

prije 11 godina

Gornji post Ggarciaa već ima jednu malu grešku, Closedir se mora koristiti čak i ako je $DeleteMe lažno











}

Closedir($dh);
if ($DeleteMe )(
@rmdir($dir);
}
}

?>

prije 9 mjeseci

Rukovanje greškom "Resource Unavailable" od strane unlink() kao izuzetka koristeći pokušaj hvatanja

Čak i is_file() ili file_exists() će provjeriti postoji li datoteka ili ne, postoje šanse da neke aplikacije koriste datoteku što će spriječiti brisanje i unlink() će prikazati grešku "Resource Unavailable".

Dakle, nakon što sam isprobao mnoge metode kao što su: `is_resource()`, `is_writable()`, `stream_get_meta_data()`...itd, došao sam do jedinog najboljeg načina da riješim grešku dok *"brišem"* fajl koji 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 ​​grešku "Resource Unavailable" jer je datoteka negdje otvorena.
// "unlink($pFilename) !== true" će provjeriti da li je datoteka uspješno izbrisana.
// Izbacivanje izuzetka tako da možemo lako obraditi grešku umjesto da se prikazuje korisnicima.
if(@unlink($pFilename) !== istina)
throw new Exception("Nije moguće izbrisati fajl: " . $pFilename . " Zatvorite sve aplikacije koje ga koriste.");
}
return true;
}

/* === UPOTREBA === */

probaj (
if(delete_file("hello_world.xlsx") === istina)
echo "Datoteka je izbrisana";
}
uhvatiti (izuzetak $e) (
echo $e->getMessage(); // će ispisati poruku o izuzetku definiranu gore.
}

prije 11 godina

Gornji post Ggarciaa ima jednu malu grešku, zanemariće nizove datoteka i direktorija koji se procjenjuju kao lažni (tj. "0")

Ispravljen kod je ispod (false !==)

// ggarciaa na gmail dot com (04-jul-2007 01:57)
// Trebao sam isprazniti direktorij, ali ga zadržati
// pa sam malo izmijenio doprinos iz
// stefano i takys dot it (28-Dec-2005 11:57)
// Kratka, ali moćna rekurzivna funkcija
// koji radi i ako direktorijumi sadrže skrivene datoteke
// $dir = ciljni direktorij
// $DeleteMe = ako je istinito izbrišite i $dir, ako je netačno ostavite ga na miru

Funkcija SureRemoveDir ($dir, $DeleteMe) (
if(! $dh = @ opendir ($dir )) return;
while (false !== ($obj = readdir ($dh ))) (
if($obj == "." || $obj == ".." ) nastavi;
if (!@ unlink ($dir . "/" . $obj )) SureRemoveDir ($dir . "/" . $obj, istina);
}
if ($DeleteMe )(
zatvoren ($dh);
@rmdir($dir);
}
}

//SureRemoveDir("EmptyMe", false);
//SureRemoveDir("RemoveMe", true);

?>

prije 8 godina

Prekid veze može biti neuspješan nakon korištenja ODBC komandi na datoteci (u Windowsu).

Ni jedno ni drugonitiuradio trik.

Samopustio fajl tako da se kasnije može izbrisati...

Nastavljamo lekciju koja je posvećena temi „ Rad sa PHP datotekama" Ako niste pročitali prethodnu, preporučujem da je pročitate, a za one koji su je pročitali, idemo dalje. U ovoj lekciji ćete naučiti kako da izbrišete kreiranu ili postojeću datoteku koristeći PHP, kopirate ili preimenujete, zaključate datoteku.
Pa, ako ste spremni, onda u bitku...

Brisanje fajla u PHP-u

Ako trebate izbrisati bilo koju datoteku, koristite funkciju PHP unlink():

Prekini vezu (ime datoteke);

Ime datoteke – ovdje unesite naziv datoteke koju želite da izbrišete.

Recimo da moramo izbrisati datoteku “file.txt”, primjer za popunjavanje bi bio sljedeći:

Unlink("file.txt");

Spreman kod:

Ako je datoteka "file.txt" bila prisutna, skripta ju je izbrisala.

Kopiranje fajla u PHP-u

Ako trebate kopirati sadržaj iz jedne datoteke u drugu, koristite funkciju PHP copy().

Kopiraj("datoteka1", "datoteka2");

File1 – naziv datoteke iz koje će se kopirati tekst
- file2 – naziv datoteke u koju će se kopirati tekst

Na primjer, kreirajte datoteku pod nazivom “file2.txt” na vašem lokalnom serveru u mapi “test-1”. Neka fajl bude prazan. Sada zalijepimo ovaj kod copy("file.txt", "file2.txt"); u php kodu “file.php”:

Šta smo uradili? Kreirao fajl pod nazivom “file.txt” preko PHP-a, napravio unos u fajl “file.txt” preko PHP-a “ Drago mi je da vas vidim na blog stranici ", prikazao rezultat u pretraživaču, kopirao tekst iz datoteke "file.txt" i zalijepio ga u datoteku "file2.txt". Ne vjerujete da se ovo dogodilo? Sjećate li se da je fajl “file2.txt” bio prazan?! Otvori! I šta vidiš? Da, tako je, tekst koji je bio u datoteci “file.txt”:

Preimenovanje datoteke u PHP-u

Da biste preimenovali datoteku, koristite funkciju PHP rename():

Preimenuj("datoteka1", "datoteka2");

File1 – naziv datoteke koju treba zamijeniti ( preimenovati)
- file2 – ovdje trebate dati novo ime datoteke

Evo primjera za popunjavanje:

Preimenuj("file2..txt");

Evo gotovog koda:

Datoteka “file2.txt” je preimenovana u datoteku “site.txt”.

Ovdje mislim da bismo trebali završiti našu lekciju. Ali to nije sve, u sljedećoj lekciji ćemo nastaviti rad sa fajlovima.

U prethodnom članku smo pričali o tome, a tamo sam vas i upoznao funkcija rmdir(), koji briše direktorij. Međutim, rekao sam da na ovaj način možete izbrisati samo prazan direktorij, ali kako izbrisati direktorij sa fajlovima, sada ćete saznati.

Princip je vrlo jednostavan: da brisanje direktorija s datotekama, prvo morate izbrisati sve datoteke, kao i sve poddirektorije. Unutar poddirektorijuma mogu biti i datoteke i drugi poddirektoriji, koje također treba obrisati. Općenito, poteškoća je u tome što dubina direktorija može biti vrlo velika. I očito je da se rekurzija sama sugerira - poziva funkciju unutar sebe.

Unatoč prividnoj složenosti algoritma, implementacija je vrlo jednostavna i transparentna:

funkcija removeDirectory($dir) (
if ($objs = glob($dir."/*")) (
foreach($objs kao $obj) (
is_dir($obj) ? removeDirectory($obj) : unlink($obj);
}
}
rmdir($dir);
}
?>

Pokušat ću jasnim jezikom objasniti algoritam ove funkcije. Prije svega, dobijamo listu svih datoteka unutar datog direktorija. Ako ih nema, odmah ih obrišite. Ako postoje, onda počinjemo da ih sortiramo jedan po jedan. Ako je element datoteka, onda ga jednostavno obrišite ( prekinuti vezu ($obj)). Ako je ovo direktorij, onda ponovo pozivamo našu funkciju, prosljeđujući ovaj direktorij. Ovo je rekurzija: funkcija poziva samu sebe. Nakon što se funkcija sama pozove, sve počinje iznova, ali s drugim direktorijem. Sve njegove datoteke se također brišu, a svi direktoriji se šalju nazad ovoj funkciji. Kada se izbrišu svi direktoriji i datoteke, briše se već prazan direktorij.

Reći ću vam ovo, ovaj algoritam nije toliko koristan sa praktične tačke gledišta (nije tako često potreban brisanje direktorija s datotekama u PHP-u), koliko je to korisno za razvoj vašeg razmišljanja. Ovo je vrlo jednostavan algoritam i rješava vrlo, vrlo složen problem. Stoga naučite sastavljati algoritme - to je najvažnija stvar u svakom programskom jeziku.

PHP je programski jezik koji se prvenstveno koristi za kreiranje dinamičkih web stranica. Kao i svaki drugi programski jezik, PHP sadrži mnogo funkcija, uključujući mnoge korisne. Na primjer, mogućnost brisanja datoteke koju možete koristiti u svojim skriptama.

Ovaj savjet će vam pomoći da naučite kako brisanje fajla u PHP-u koristeći funkciju prekinuti vezu.

Korak po korak uputstvo:

Za brisanje datoteke u PHP-u možete koristiti funkciju prekinuti vezu. Koristeći jednostavnu skriptu kao primjer, pogledajmo kako ona funkcionira prekinuti vezu:

  1. Napravite tekstualnu datoteku u uređivaču teksta (vi/vim, nano, gedit ili samo standardni Notepad).
  2. Unesite ili jednostavno kopirajte sljedeći kod u njega:$file="example.log";
    unlink($file);
    ?>
  3. Sačuvajte (na primjer, pod imenom testunlink.php) i postavite kreiranu datoteku skripte na svoj testni web server. U istom direktoriju kreirajte datoteku example.log sa bilo kojim sadržajem. To je ono što ćemo izbrisati.
  4. Pokrenite skriptu tako što ćete je pozvati u svom pretraživaču i kada ponovo pogledate u direktorij, otkrit ćete da datoteka example.log više nije tamo. Prekini vezu uradio trik!

Kako sve funkcionira:

Prvi red koda skripte: određujemo tip naše skripte.

Drugi red koda: Nakon pokretanja skripte koju smo kreirali, varijabli datoteke će biti dodijeljena vrijednost primjer.log(imajte na umu da datoteka sa istim imenom mora biti prisutna u istom direktoriju kao i skripta koju smo kreirali. Samo je kreirajte sa bilo kojim sadržajem!).

Treći red koda: Izbrišite datoteku example.log tako što ćete je proslijediti kao argument funkciji unlink.

Četvrti red koda skripte: kraj php koda.