[英]Using a wildcard in php unlink
我目前正在創建一個PHP腳本來繪制來自數據庫的一堆數據,將其排列成文本文件,然后運行GNUPlot腳本來生成圖形。 我已經完成了所有這些工作,現在我需要做的就是刪除我不再需要的文本文件。
我一直在嘗試的是從另一個論壇上的另一個主題得到的:
foreach( glob('US_A.2.6.*') as $file )
{
unlink($file);
}
然而,問題是它不起作用。 這些文件具有復雜的結束名稱:
和更多。
使用getcwd()檢查您的工作目錄。 如果您與文本文件不在同一目錄中,則需要指定路徑。
另外,嘗試回顯glob()語句的輸出,看看它是否找到了任何文件:
echo $file . PHP_EOL;
unlink($file);
您沒有檢查unlink()返回值,因此如果文件是不可寫的,它可能會以靜默方式失敗(取決於您的error_reporting級別)。
根據您的約束,您可以通過使用exec()
調用以更少的跨平台可移植性為代價生成更簡潔的代碼。 我更喜歡給出絕對路徑,我通常在所有腳本中包含的配置文件中對變量進行硬編碼,因此:
define (FULL_DIRECTORY_PATH,'/whatever/your/path/is/');
...
exec('rm ' . FULL_DIRECTORY_PATH . 'US_A.2.6.*');
要么
define (BASE_PATH,'/base/path/');
...
exec('rm ' . BASE_PATH . 'additional/path/US_A.2.6.*');
該解決方案適用於Linux和其他UNIX系統。 盡管在Windows上使用PHP並不常見,但您可以將其調整為適用於Windows服務器。
如果有任何用戶提交的輸入,則使用exec()
會產生一些嚴重的安全風險; 代碼原樣,它會很好,因為路徑和文件名都是硬編碼的。 但是如果包含任何自定義輸入,請確保使用escapeshellarg函數。
正如George Cummins所說,此解決方案不包括錯誤處理。 如果您需要逐個文件地進行錯誤處理,我發現他的解決方案更好。 但是,我通常使用像這里的設置,沒有錯誤處理,清理自動生成的文件,並且我在使用這些結構10多年后從未遇到過任何問題。 對於此類用途,通常僅在設置和測試期間需要錯誤處理,並且通常歸結為正確設置目錄權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.