2010-08-27 90 views
2

我想刪除特定文件夾中的所有內容,但它似乎並沒有影響子文件夾,但它應該,因爲bash命令從控制檯執行它。PHP的exec rm -Rf不工作的子目錄

system('rm -Rf some_dir/*'); 
+0

它可能有事情做在bash擴展該星號。你真的想刪除some_dir下面的所有文件而不刪除它嗎? – 2010-08-27 19:18:28

+3

有沒有原因你不使用遞歸'unlink'和/或'rmdir'調用? '系統'似乎對我來說過分殺傷,當你不能總是保證它會對你有用... – prodigitalson 2010-08-27 19:21:12

+0

我創建了bash腳本,將第一個參數作爲目錄,然後用bash刪除目錄。 – 2010-08-27 19:21:58

回答

2

這個命令中沒有必要用星號。如果您想要將目錄與文件一起刪除,請刪除斜槓。離開斜線將刪除文件,但保留目錄。

還要檢查這個頁面的評論:http://php.net/manual/en/function.unlink.php

1

這可能是因爲執行腳本的用戶沒有刪除目錄的權限,或者shell不在正確的目錄中。

如果您通過apache運行此程序,則該進程可能由www-data擁有。如果「some_dir」目錄不允許通過www-data進行寫入訪問,那麼它將不起作用。

由於您使用的是相對路徑(非常危險),因此您需要確保腳本在正確的目錄中執行。如果可以的話,我建議你將路徑改爲絕對路徑 - 「rm -rf/path/to/some_dir」。

+1

我寧願說apache和php腳本作爲用戶「nobody」運行。所以請確保「chown -R nobody:users DIRNAME」。 – nottinhill 2012-08-27 13:06:28