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: