opendir, readdir, fopen, fread...
Pessoal,
Tenho um arquivo HTML (Relatorio gerado automaticamente pelo AIDA32) e preciso selecionar parte desse arquivo para extrair os dados que eu quero.
Ja perguntei isso aqui uma vez e me recomendaram Expressões Regulares, de fato com ER ele encontra o dado que eu quero sem problemas, mas não dá pra fazer com que o codigo pegue os arquivos e trate eles de forma automatica e dinâmica, uma vez que os dados de um arquivo para o outro muda.
Tenho o seguinte arquivo HTML
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="AIDA32 v3.93">
</HEAD>
<STYLE>
A { text-decoration: none }
A:hover { text-decoration: underline }
TD { font: 80% verdana, arial; color: #000000; vertical-align: text-center; text-align: left }
TD.cr { font: 80% verdana, arial; color: #000000; vertical-align: text-center; text-align: right }
TD.cc { font: 80% verdana, arial; color: #000000; vertical-align: text-center; text-align: center }
TD.pt { font: bold 140% verdana, arial; color: #000080; vertical-align: text-center }
TD.dt { font: bold 110% verdana, arial; color: #000080; vertical-align: text-center }
</STYLE>
<TITLE>Relatório de <SUPORTE_TECNICO></TITLE>
<BODY BGCOLOR="#FFFFFF">
<TABLE WIDTH=100%><TD CLASS=pt>Sumário<TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16> <TD WIDTH=16><TD WIDTH=16><TD WIDTH=16><TD WIDTH=16>
<TR><TD>
<TR><TD><TD><TD COLSPAN=3><B>Placa mãe:</B>
<TR><TD><TD><TD><TD>Tipo de processador <TD><A HREF="[http://www.intel.com/products/browse/processor.htm"](http://www.intel.com/products/browse/processor.htm) TARGET=blank TITLE="Intel Corporation">Intel Celeron 4A, 2400 MHz (6 x 400)</A>
<TR><TD><TD><TD><TD>Nome da Placa Mãe <TD><A HREF="[http://www.viavpsd.com"](http://www.viavpsd.com) TARGET=blank TITLE="VIA Technologies, Inc.">VIA P4MA Pro (533) (3 PCI, 1 AGP, 1 CNR, 2 DIMM, Audio, Video, LAN)</A>
<TR><TD><TD><TD><TD>Memória do Sistema <TD>496 MB (DDR SDRAM)
<TR><TD>
<TR><TD><TD><TD COLSPAN=3><B>Armazenamento:</B>
<TR><TD><TD><TD><TD>Disco rígido <TD><A HREF="[http://www.samsung.com/Products/HardDiskDrive/index.htm"](http://www.samsung.com/Products/HardDiskDrive/index.htm) TARGET=blank TITLE="Samsung">SAMSUNG SP0411N (40 GB, 7200 RPM, Ultra-ATA/133)</A>
</TABLE><BR><BR>
<TABLE WIDTH=100%><TD CLASS=pt>Sistema operacional<TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16> <TD WIDTH=16><TD WIDTH=16><TD WIDTH=16><TD WIDTH=16>
<TR><TD><TD><TD COLSPAN=3><B>Propriedades do Sistema Operacional:</B>
<TR><TD><TD><TD><TD>Nome do Sistema Operacional <TD>Microsoft Windows XP Professional
<TR><TD><TD><TD><TD>Nome código do Sistema Operacional <TD>Whistler
<TR><TD><TD><TD><TD>Idioma do Sistema Operacional <TD>Português (Brasil)
<TR><TD><TD><TD><TD>Tipo de núcleo do Sistema Operacional <TD>Uniprocessor Free
<TR><TD><TD><TD><TD>Versão do Sistema Operacional <TD>5.1.2600 (WinXP Retail)
<TR><TD><TD><TD><TD>Service Pack do Sistema Operacional <TD>Service Pack 2
<TR><TD><TD><TD><TD>Data da instalação do Sistema Operacional <TD>29/6/2007
<TR><TD><TD><TD><TD>Carpeta Raiz do Sistema Operacional <TD>C:\WINDOWS
<TR><TD>
etc...
São varios arquivos seguindo esse mesmo padrão acima, mudando apenas os dados.
o Codigo PHP que criamos é esse aqui:
<?php
// pega o endereço do diretório Atual
$diretorio = "relatoriosAIDA";
// abre o diretório
$ponteiro = opendir("$diretorio");
// monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {
$itens[] = $nome_itens;
}
// ordena o vetor de itens
sort($itens);
// percorre o vetor para fazer a separacao entre arquivos e pastas
foreach ($itens as $listar) {
// retira "./" e "../" para que retorne apenas pastas e arquivos
if ($listar!="." && $listar!=".."){
// checa se o tipo de arquivo encontrado é uma pasta
if (is_dir($listar)) {
// caso VERDADEIRO adiciona o item à variável de pastas
$pastas[]=$listar;
} else{
// caso FALSO adiciona o item à variável de arquivos
$arquivos[]=$listar;
}
}
}
// lista as pastas se houverem
/*
if ($pastas != "" ) {
foreach($pastas as $listar){
print "Pasta: <a href='$listar'>$listar</a><br>";}
}*/
// lista os arquivos se houverem
if ($arquivos != "") {
foreach($arquivos as $listar){
print " Arquivo: <a href='$diretorio/$listar'>$listar</a><br>";
// Pega o nome do Arquivo, Abre em Modo Leitura, Lê o conteudo do Arquivo, Retira TAGs <TD>
$arquivoEncontrado = "$diretorio/$listar";
$abrirArquivo = fopen($arquivoEncontrado,'r');
$conteudoArquivo = fread($abrirArquivo, filesize($arquivoEncontrado));
$limpandoArquivo = strip_tags($conteudoArquivo,'<(.*?)>')."<br>";
$limpandoArquivo = split("<TD>", $conteudoArquivo);
//for ($i=0; $i<$limpandoArquivo; $i++) {
//echo $limpandoArquivo[$i];//}
// Pega somente os dados que interessa do RelatorioAida e Limpa os caracteres HTML
/* $nomeArquivo = $arquivoEncontrado;
$nomeComputador = strip_tags($limpandoArquivo[111],'<(.*?)>');
$tipoProcessador = strip_tags($limpandoArquivo[9],'<(.*?)>');
$nomePLacaMae = strip_tags($limpandoArquivo[14],'<(.*?)>');
$memoria = strip_tags($limpandoArquivo[19],'<(.*?)>');
$sistemaOperacional = strip_tags($limpandoArquivo[40],'<(.*?)>');
$sistemaOperacionalIdioma = strip_tags($limpandoArquivo[50],'<(.*?)>');
$sistemaOperacionalServicePack = strip_tags($limpandoArquivo[65],'<(.*?)>');
$sistemaOperacionalChave = strip_tags($limpandoArquivo[103],'<(.*?)>');
// $nomeDominio = strip_tags($limpandoArquivo[121],'<(.*?)>');*/
// echo strip_tags($limpandoArquivo[111],'<(.*?)>')."<br>";
}
}
?>A Parte comentada é uns testes que eu estava fazendo estava funcionando mas o problema é que, pelo fato de alguns arquivos acrescentar alguns dados a array que eu apontei acaba pegando a informação errada.
Pra evitar isso eu queria isolar partes do arquivo então, Tipo queria pegar apenas uma determinada parte e retirar os dados que eu quero. Pegar mais uma parte do arquivo e pegar os dados do arquivo, de forma que o array[1] sempre seja a primeira linha dessa parte selecionada.
Nao sei se ficou claro, mas quem puder ajudar ou encaminhar essa duvida eu fico grato... http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif
Discussão (3)
Carregando comentários...