2012-09-03 68 views
5

我正在使用通配符(*)從給定文件夾中刪除某些文件的php腳本。
我發現了一些工作示例,如this one,其中unlink()和​​3210函數被使用。使用通配符刪除文件 - exec vs unlink

現在,我想知道,使用exec函數和像rm -f /path/to/folder/_prefix_*這樣的命令刪除文件也可以嗎?
使用它有沒有任何安全風險?
如果可以,在性能方面會更好嗎?

編輯:
所以,從第一個答案我可以看出,確實,使用exec可能是一個可以接受的解決方案。
性能問題呢?有沒有可能exec選項比glob/unlink技術更好(更快/更低要求)?

預先感謝您

+1

rm會很好,安全問題取決於誰可以運行腳本。 – 2012-09-03 21:49:57

回答

8

因爲沒有機會爲用戶提供的數據將被注入,沒有使用過exec沒有glob/unlink安全問題。但是,使用glob/unlink允許你定義的例外:

foreach(glob("delete/*") as $f) { 
    if($f == "delete/notme.txt") continue; 
    unlink($f); 
} 

而且exec通常在共享服務器上禁用,因此glob/unlink更便於攜帶。如果你有一個專門的設置,並不打算放棄,你不需要擔心。

+0

感謝您回覆Kolink。我在一臺擁有的服務器上,並且exec已啓用且工作正常。你認爲使用一種技術可以改變性能嗎? – CrisDeBlonde

+0

我想'exec'會更快,但'glob/unlink'可以讓腳本始終知道到底發生了什麼 - 對控制檯應用程序有用而不是基於web,但是您也可以獲取每個文件的錯誤報告,或列出已刪除的文件... –

1

兩種選擇都可以。但是,如果您不控制自己的服務器或共享主機,則exec命令將無法使用。

要保存一面,請使用glob並取消鏈接。

相關問題