我有一个要删除的文件路径列表。我将文件路径放在服务器根目录中的纯文本文件中。例如:
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);
}
当我运行我的脚本时,没有输出任何内容。简单地说,列表中的文件不会被删除。那是为什么?
答案 0 :(得分: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;
}
}
答案 1 :(得分: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
}
}