O PHP abaixo já funciona mas preciso automatizá-lo.
Da forma que está ele procura por determinada palavra, cria um arquivo e move todas as palavras encontradas em todos os arquivos da pasta para um único arquivo.
Agradeço por qualquer alteração ou melhoria nele.
Retirar a opção de apenas arquivos TXT e deixar ler qualquer arquivo
$files = glob($base.’*.txt’); // Pega todos os arquivos que terminam com .txt
Preciso que ele trabalhe de forma automática e fazendo o seguinte:
- Opção de escolher pasta ORIGEM
- opção de escolher pasta DESTINO
Na pasta ORIGEM:
- Abrir o primeiro arquivo TXT (que tem um email por linha+Enter)
- Ver qual servidor do primeiro email - exemplo: @teste.com.br
- Criar um arquivo chamado “teste.com.br” na pasta DESTINO
- Mover todos os emails @teste.com.br deste arquivo origem para o arquivo destino
- Salvar o arquivo aberto e recomeçar a partir da opção 3.
Como são vários arquivos e alguns com 300Mb então precisa fazer LOOP do 3 ao 7 para economizar memória e o computador conseguir realizar a tarefa.
$base = __DIR__.DIRECTORY_SEPARATOR; // Diretório onde estão os arquivos txt.
$files = glob($base.'*.txt'); // Pega todos os arquivos que terminam com .txt
$search = 'silva'; // a palavra que deseja buscar
$found = array();
$arr = array();
// Itera os arquivos encontrados
foreach ($files as $file) {
// Lê cada arquivo em um array
$arr = file($file);
foreach ($arr as $k => $v) {
// Se encontrar a palavra, guarda no array $found e remove do array que leu o arquivo.
if (stripos($v, $search) !== false) {
$found[] = trim($arr[$k]);
unset($arr[$k]);
}
}
// Salva os dados no arquivo, com os nomes removidos
if (!empty($found)) {
file_put_contents($file, implode('', $arr));
}
}
// salva todos os nomes encontrados
if (!empty($found)) {
file_put_contents($base.'silva.txt', implode(PHP_EOL, $found));
}
unset($found, $arr);