Hur man tar bort en php-fil som inte är raderad. Hur tar man bort en fil i PHP? Varför kallas denna funktion unlink()
8 år sedan
Har du raderat en stor fil men ser ingen ökning av ledigt utrymme eller minskad diskanvändning? Använder du UNIX eller annat POSIX OS?
Unlink() handlar inte om att ta bort fil, det handlar om att ta bort ett filnamn. Mansidan säger: `` unlink - radera ett namn och eventuellt filen den refererar till"".
För det mesta har en fil bara ett namn -- om du tar bort det tar du också bort (gratis, deallokera) filens "kropp" (med en varning, se nedan). Det är det enkla, vanliga fallet.
Det "är dock helt okej för en fil att ha flera namn (se länk()-funktionen), i samma eller olika kataloger. Alla namn kommer att hänvisa till filkroppen och "hålla den vid liv", så att säga. Först när alla namn har tagits bort frigörs filen faktiskt.
Varningen:
En fils kropp kan *också* hållas vid liv (fortfarande använder diskutrymme) genom en process som håller filen öppen. Kroppen kommer inte att avallokeras (kommer inte att frigöra diskutrymme) så länge som processen håller den öppen. Faktum är att det finns ett fint sätt att återuppliva en fil som tagits bort av ett misstag men som fortfarande hålls öppen av en process...
10 år sedan
Jag har arbetat på ett litet test där en säkerhetskopia skapades innan huvudtextfilen modifierades. När sedan ett fel uppstår kommer huvudfilen att raderas (avlänkas) och backupfilen returneras istället.
Men jag har brutit huvudet i ungefär en timme om varför jag inte kunde få mina behörigheter rätt att ta bort länken till huvudfilen.
Äntligen visste jag vad som var fel: eftersom jag arbetade med filen och ännu inte hade stängt filen användes den fortfarande och kunde naturligtvis inte raderas:)
Så jag tänkte nämna detta här för att undvika att andra gör samma misstag:
// Stäng först filen
fclose($fp);
// Ta sedan bort länken :)
unlink ($somefile);
?>
14 år sedan
För att radera alla filer med ett visst tillägg, eller faktiskt, ta bort alla med jokertecken, är ett mycket enkelt sätt att använda glob-funktionen. Säg att jag ville ta bort alla jpg-filer.........
Foreach (glob ("*.jpg") som $filnamn ) (
echo "$filnamnsstorlek". filstorlek ($filnamn) . "\n" ;
unlink ($filnamn);
}
?>
10 år sedan
För alla som har haft problem med felet nekad behörighet, orsakas det ibland när du försöker ta bort en fil som finns i en mapp högre upp i hierarkin till din arbetskatalog (dvs. när du försöker ta bort en sökväg som startar) med "../").
Så för att kringgå det här problemet kan du använda chdir() för att ändra arbetskatalogen till mappen där filen du vill ta bort länken finns.
$old = getcwd(); // Spara den aktuella katalogen
chdir($sökväg_till_fil);
unlink ($filnamn);
chdir ($gammal); // Återställ den gamla arbetskatalogen
?>
4 år sedan
På OSX, när du kämpar mot ett "Permission Denied"-fel, se till att katalogen har WRITE-behörigheter för den exekverande php-användaren.
Dessutom, om du förlitar dig på ACLs och vill ta bort en fil eller symbollänk, måste den innehållande katalogen ha "delete_child"-behörighet för att kunna koppla bort saker inuti. Om du bara beviljar "delete" till mappen som gör att du kan ta bort själva containermappen, men inte objekten inuti.
4 år sedan
Detta kan tyckas självklart, men jag höll på att slita mig med det här problemet - se till att filen du försöker ta bort inte används för närvarande. Jag hade ett skript som analyserade en textfil och var tänkt att radera den efter att ha slutförts, men jag fick hela tiden ett felmeddelande om permission nekad eftersom jag inte uttryckligen hade stängt filen, så det var tekniskt sett fortfarande "används" även om analysen var komplett.
11 år sedan
Ggarciaas inlägg ovan har redan ett litet fel, closedir måste användas även om $DeleteMe är falskt
}
Closedir($dh);
if ($DeleteMe )(
@rmdir($dir);
}
}
?>
9 månader sen
Hanterar felet "Resource Unavailable" genom att unlink() som undantag använder try catch
Även is_file() eller file_exists() kommer att kontrollera om filen finns eller inte, det finns chanser att filen används av vissa applikationer som förhindrar radering och unlink() kommer att visa felet "Resource Unavailable".
Så efter att ha provat många metoder som: `is_resource()`, `is_writable()`, `stream_get_meta_data()`...etc, nådde jag det enda bästa sättet att hantera fel när jag *"raderade"* en fil som antingen är * *finns inte** eller **finns men används av något program**
funktion delete_file($pFilename)
{
if (fil_exists($pFilename)) (
// Tillagd av muhammad.begawala
// "@" kommer att sluta visa felet "Resurs ej tillgänglig" eftersom filen är öppen någonstans.
// "unlink($pFilename) !== true" kommer att kontrollera om filen har raderats.
// Kasta undantag så att vi enkelt kan hantera fel istället för att visa för användare.
if(@unlink($pFilename) !== sant)
throw new Exception("Kunde inte ta bort filen: " . $pFilename . " Stäng alla program som använder den.");
}
returnera sant;
}
/* === ANVÄNDNING === */
Prova (
if(delete_file("hello_world.xlsx") === sant)
echo "Fil raderad";
}
fånga (Undantag $e) (
echo $e->getMessage(); // kommer att skriva ut undantagsmeddelandet definierat ovan.
}
11 år sedan
Ggarciaas inlägg ovan har ett litet fel, det kommer att ignorera fil- och katalogsträngar som utvärderas som falska (dvs. "0")
Fast kod är nedan (falskt !==)
// ggarciaa på gmail dot com (04-juli-2007 01:57)
// Jag behövde tömma en katalog, men behålla den
// så jag modifierade bidraget något från
// stefano på takys dot it (28-dec-2005 11:57)
// En kort men kraftfull rekursiv funktion
// som fungerar även om dirs innehåller dolda filer
// $dir = målkatalogen
// $DeleteMe = om sant radera också $dir, om false lämna det ifred
Funktion SureRemoveDir ($dir, $DeleteMe) (
if(! $dh = @ opendir ($dir )) returnera;
while (false !== ($obj = readdir ($dh ))) (
if($obj == "." || $obj == ".." ) fortsätt;
if (!@ unlink ($dir . "/" . $obj )) SureRemoveDir ($dir . "/" . $obj , true );
}
if ($DeleteMe )(
closedir($dh);
@rmdir($dir);
}
}
//SureRemoveDir("EmptyMe", false);
//SureRemoveDir("RemoveMe", true);
?>
8 år sedan
Avlänkning kan misslyckas efter att ha använt ODBC-kommandon på filen (på Windows).
Varkeninte hellergjorde susen.
Endastsläppte filen så att den kunde raderas efteråt ...
Vi fortsätter lektionen, som är tillägnad ämnet " Arbeta med PHP-filer" Om du inte har läst den förra rekommenderar jag att du läser den, och för de som har läst den, låt oss gå vidare. I den här lektionen kommer du att lära dig hur du tar bort en skapad eller befintlig fil med PHP, kopierar eller byter namn, låser en fil.
Tja, om du är redo, gå till strid...
Ta bort en fil i PHP
Om du behöver ta bort någon fil, använd PHP unlink()-funktionen:
Unlink(filnamn);
Filnamn – här anger du namnet på filen du vill radera.
Låt oss säga att vi måste ta bort filen "file.txt", ett exempel att fylla skulle vara så här:
Unlink("file.txt");
Klar kod: