如何删除php

时间:2015-10-19 09:47:32

标签: php

假设我有一个包含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指针更改为' $文件'直接删除下一个文件?

2 个答案:

答案 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
    }
?>