這將刪除目錄中所有符合特定模式的檔案,只需一行程式碼。
<?php array_map('unlink', glob("some/dir/*.txt")); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
unlink — 刪除檔案
刪除 filename
。類似於 Unix C 的 unlink() 函式。失敗時將產生 E_WARNING
等級的錯誤。
版本 | 說明 |
---|---|
7.3.0 | 在 Windows 上,現在可以使用 unlink() 刪除使用中控制代碼的檔案,而以前這樣做會失敗。但是,在所有指向它的控制代碼都關閉之前,仍然無法重新建立已刪除的檔案。 |
範例 #1 基本的 unlink() 用法
<?php
$fh = fopen('test.html', 'a');
fwrite($fh, '<h1>Hello world!</h1>');
fclose($fh);
unlink('test.html');
?>
這將刪除目錄中所有符合特定模式的檔案,只需一行程式碼。
<?php array_map('unlink', glob("some/dir/*.txt")); ?>
刪除了大型檔案,但沒有看到可用空間增加或磁碟使用量減少?使用 UNIX 或其他 POSIX 作業系統?
unlink() 並非用於移除檔案,而是用於移除檔案名稱。man 頁面說明:「unlink - 刪除名稱以及可能刪除它所參考的檔案」。
大多數情況下,一個檔案只有一個名稱 — 移除它也會移除(釋放、取消配置)檔案的「主體」(有一個需要注意的地方,見下文)。這是簡單、常見的情況。
然而,一個檔案有多個名稱(參見 link() 函式)是完全沒問題的,無論是在同一個目錄還是在不同的目錄中。所有名稱都將參考檔案主體並「保持其活動狀態」。只有當所有名稱都被移除時,檔案主體才會真正被釋放。
注意事項
檔案的主體也可能被持有檔案開啟狀態的程序「保持活動狀態」(仍在使用磁碟空間)。只要程序保持檔案開啟,主體就不會被釋放(不會釋放磁碟空間)。事實上,有一種奇特的方法可以恢復被誤刪但仍被程序開啟的檔案…
unlink($fileName); 對我來說失敗了。
然後我嘗試使用 realpath($fileName) 函式,如下所示:
unlink(realpath($fileName)); 成功了
只是發布出來,以防有人覺得有用。
這是使用遮罩刪除檔案最簡單的方法
<?php
$mask = "*.jpg"
array_map( "unlink", glob( $mask ) );
?>
我一直在做一些小嘗試,在修改主文字檔之前建立一個備份檔。然後,當發生錯誤時,主檔案將被刪除(取消連結),並返回備份檔。
不過,我花了大約一個小時的時間在思考為什麼我無法獲得正確的權限來取消連結主檔案。
最後我知道問題出在哪裡:因為我正在處理該檔案並且尚未關閉該檔案,所以它仍在使用中,當然無法刪除 :)
所以我想在這裡提一下,以避免其他人犯同樣的錯誤
<?php
// 先關閉檔案
fclose($fp);
// 然後取消連結 :)
unlink($somefile);
?>
要刪除特定副檔名的所有檔案,或者實際上,使用萬用字元刪除所有檔案,一種更簡單的方法是使用 glob 函式。假設我想刪除所有 jpg 檔案 .........
<?php
foreach (glob("*.jpg") as $filename) {
echo "$filename 大小 " . filesize($filename) . "\n";
unlink($filename);
}
?>
對於遇到權限被拒絕錯誤的人來說,有時這是由於您嘗試刪除階層結構中比工作目錄更高的資料夾中的檔案所引起的(例如,嘗試刪除以 "../" 開頭的路徑時)。
因此,要解決此問題,您可以使用 chdir() 將工作目錄更改為要取消連結的檔案所在的資料夾。
<?php
$old = getcwd(); // 儲存目前的目錄
chdir($path_to_file);
unlink($filename);
chdir($old); // 還原舊的工作目錄
?>