假设我有一个包含99tf.txt,40.txt,65.txt的文件夹,按任意顺序
如果当前脚本var是40.txt:我希望它删除65.txt(或下一个文件)
我正在调查这样的事情:
$file='40.txt';
if ($handle = opendir('./log/')) {
$entry= readdir($handle);
//move pointer to 40.txt
while ($file != $entry && $entry !== false) {
$entry = readdir($handle)
}
//go to the next file
$entry = readdir($handle)
if(is_file('./log/'.$entry)){
unlink('./log/'.$entry);
}
}
但是我想避免每次都进入一个循环,因为文件夹中可能有很多文件。 那么有没有办法将$ handle指针更改为' $文件'直接删除下一个文件?
答案 0 :(得分:0)
如果您不介意使用scandir
,那么这应该更适合您。
$file = '40.txt';
$contents = scandir('./log/');
// Should already be sorted, but do again for safe measure
sort($contents);
// Make sure the file is in there.
if (false !== $index = array_search($file, $contents)) {
// If the file is at the end, do nothing.
if ($index !== count($contents)) {
// Remove the next index
unlink('./log/' . $contents[$index + 1]);
}
}
关于无关紧要的订单,您不需要对其进行排序。值得注意的是,你的方法花费的时间更长,但占用的内存更少,而这种方法反过来,速度更快,但可能会消耗更多内存。
答案 1 :(得分:0)
<?php
$file = '40.txt';
$scan_folder = scandir('./log/');
$num_files = count($scan_folder);
if ($num_files > 1) {
$file_key = array_search($file, $scan_folder) +1;
unlink('./log/'.$file_key);
} else {
// here you will preserve only 1 file all others can be removed every time this script is executed
}
?>