如何通过PHP删除满足条件的文件夹中的多个文件

时间:2015-12-18 19:43:41

标签: php file directory

我理解如何使用PHP中的'unlink'命令删除指定的文件,但我需要做的是编写一些代码,将文件夹中的所有(10,000+)个文件(可能将它们放入数组中) ),打开它们,然后仅删除包含特定信息的文件。 (文件夹中的所有文件都是包含数字列表或数组的.txt文件.EX:我想删除数组中4,5,6,7个插槽分别包含20,20,100,100的任何文件)。

这是一个开始:

<?php
$directory = '/path/to/files';

if (! is_dir($directory)) {
    exit('Invalid diretory path');
}

$files = array();

foreach (scandir($directory) as $file) {
    if ('.' === $file) continue;
    if ('..' === $file) continue;

    $files[] = $file;
}

var_dump($files);
?>

1 个答案:

答案 0 :(得分:0)

接着来自@ShawnMehan和@Jigar的评论和我自己的评论 - 我无法在我所处的地方测试这个但是它可能会指向你的方向你需要。不确定每个文件中有多少行数组,所以我使用了循环但如果只有一行,则只需要fgets()

我假设文本文件中的数组是逗号分隔的,但如果它们是制表符分隔符,则需要通过&#34; \ t&#34;将它们分解。

       $files = array();
       $each_line = array();
       $file_counter = 0;
       $directory = '/path/to/files';

       if (! is_dir($directory)) {
       exit('Invalid directory path');
       }

       $files = glob($directory."/*.txt"); // Scan directory for .txt files

       // Check that there are .txt files in directory
       if ($files !== false) {
       $number_of_files = count($files); // Count number of .txt files in directory
          while($file_counter < $number_of_files){
          $file_handle = fopen ($files[$file_counter], "r"); // Open file
                   while (!feof ($file_handle)) {  
                   // get the arrays a row at a time and put each row into array
                   $each_line = explode( ',', fgets($file_handle, 1000)); 
                        if($each_line[3] == 20 || $each_line[4] == 20 || $each_line [5] == 100 || $each_line[6] == 100){
                        unlink($file_handle);
                        }
                   }
               if(file_exists($file_handle)){
               fclose($file_handle);
               }
           $file_counter++;   
           }
       }else{
       echo "No text files found in this directory";
       }

有关使用glob();打开文件的一些注意事项,以防您无法打开本地文件(它无法处理远程文件):http://php.net/manual/en/function.glob.php