我理解如何使用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);
?>
答案 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