2013-06-21 58 views
0

我有一個我想要刪除的文件路徑列表。我將文件路徑放在服務器根目錄下的純文本文件中。例如:用PHP刪除文件

files_to_be_removed.txt

/path/to/bad/file.php 
/path/to/another/bad/file.php 

在同一目錄中,我有另外一個文件:

remove.php

$handle = @fopen("files_to_be_removed.txt", "r"); 
if ($handle) { 
    while (($buffer = fgets($handle, 4096)) !== false) { 
     if (unlink($buffer)) 
      echo $buffer . ' removed.'; 
    } 
    fclose($handle); 
} 

當我運行我的腳本,沒有輸出。簡單地說,列表中的文件不會被刪除。這是爲什麼?

+2

Echo在while循環的$緩衝區變量,然後你會看到這文件時,它正試圖刪除? –

+3

您是否擁有這些文件夾和這些文件的所有正確權限? – bottleboot

+0

@DanyCaissy是的,我試過了,它迴應了正確的文件名。 –

回答

1
$files = file('files_to_be_removed.txt', FILE_IGNORE_NEW_LINES); 
foreach ($files as $file) { 
    if (@unlink($file)) { 
     echo $file, ' removed', PHP_EOL; 
    } else { 
     $error = error_get_last(); 
     echo 'Couldn\'t remove ', $file, ': ', $error['message'], PHP_EOL; 
    } 
} 
0

我猜的文件不被刪除,因爲「你已經有上有一個LOCK」 [只是一個猜測 - 由於你打開它,並檢查它的內容。
你能避免所有的壓力,並簡單地調整你的整個腳本的幾行:

foreach($filepaths as $filepath){ 
    $status = @unlink($filepath); 
    #the @ is there for error suppression -- in case the file doesn't exist 
    if($status){ 
     #do what you want -- it was successful 
    } 
}