0

我有一个要删除的文件路径列表。我将文件路径放在服务器根目录中的纯文本文件中。例如:

files_to_be_removed.txt

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

在同一目录中,我有另一个文件:

删除.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);
}

当我运行我的脚本时,没有任何输出。简单地说,列表中的文件不会被删除。这是为什么?

4

2 回答 2

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;
    }
}
于 2013-06-21T14:04:08.217 回答
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
    }
}
于 2013-06-21T14:04:15.657 回答