簡體   English   中英

在php unlink中使用通配符

[英]Using a wildcard in php unlink

我目前正在創建一個PHP腳本來繪制來自數據庫的一堆數據,將其排列成文本文件,然后運行GNUPlot腳本來生成圖形。 我已經完成了所有這些工作,現在我需要做的就是刪除我不再需要的文本文件。

我一直在嘗試的是從另一個論壇上的另一個主題得到的:

foreach( glob('US_A.2.6.*') as $file )
    {
        unlink($file);
    }

然而,問題是它不起作用。 這些文件具有復雜的結束名稱:

  • US_A.2.6.1.1a.txt
  • US_A.2.6.1.2a.txt
  • US_A.2.6.1.3a.txt
  • US_A.2.6.1.4a.txt
  • US_A.2.6.1.5a.txt
  • US_A.2.6.1.6a.txt

和更多。

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM