Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera,
Boa tarde, tenho uma pasta onde são gerados varios arquivos txt dariamente e preciso ler todos e gravar em banco...
Precisaria de abrir o diretório e ler arquivo a arquivo....
Para 1 arquivo funciona, teria que fazer um loop por arqui alguém tem alguma idéia?
$ponteiro = fopen ("C:\\Apache\\htdocs\\Teste\\TG002_48001_12107_01986_002_20110201004218_08.65.txt", "r");
//LÊ O ARQUIVO ATÉ CHEGAR AO FIM
while (!feof ($ponteiro)) {
//LÊ UMA LINHA DO ARQUIVO
$arq = fgets($ponteiro, 4096);
$data_j = strtotime('2002-12-31');
$arq_tam = strlen($arq);
$arq_tipo = substr($arq,0,3);
$arq_ver = substr($arq,3,3);
$arq_dataj = substr($arq,6,5);
$arq_hora = substr($arq,11,5);
$arq_datajc = date('d/m/Y',strtotime('+'.$arq_dataj.'days',strtotime('2002-12-31')));
$arq_horac = gmdate("H:i:s",$arq_hora);
if ($arq_tipo == "002"){
print "Tamanho do arquivo: " . $arq_tam . "<br>";
print "Tipo do arquivo: " . $arq_tipo . "<br>";
print "Versão do arquivo: " . $arq_ver . "<br>";
print "Data do arquivo: " . $arq_dataj . "<br>";
print "Data Juliana convertida : " . $arq_datajc . "<br>";
print "Hora do arquivo: " . $arq_hora . "<br>";
print "Hora Convertida: " . $arq_horac . "<br>";
// VERIFICA O TIPO DO REGISTRO 002
if ($arq_ver == "001"){
if ($arq_tam < 129) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
//exit();
}
} else if ($arq_ver == "002"){
if ($arq_tam < 146) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
} else if ($arq_ver == "003"){
if ($arq_tam < 166) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
} else if ($arq_ver == "004"){
if ($arq_tam < 176) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
} else if ($arq_ver == "005"){
if ($arq_tam < 150) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
} else if ($arq_ver == "006"){
if ($arq_tam < 152) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
}
}
//IMPRIME NA TELA O RESULTADO
// echo $arq."<br>";
}//FECHA WHILE
//FECHA O PONTEIRO DO ARQUIVO
fclose ($ponteiro);
Qual o Erro ?
ell_cpu / Andrey,
Usando o exemplo dado pelo ell_cpu, ficou assim:
$dir = "C:/Apache/htdocs/UD_002_20110131";
// Abre o diretorio $dir
$abredir = opendir($dir);
// Faz o loop para a exibição de usuários
while (false !== ($arqs = readdir($abredir))) {
// Aqui fazemos o php tirar "." e ".." que são "bugs" do readdir()
// Também faz com que só sejam abertos arquivos de texto
if ($arqs != "." && $arqs != ".." && preg_match("/\.(txt){1}$/i", $arqs, $ext)) {
// Agora iremos abrir arquivo por arquivo, e exibir os dados do usuário
// Usamos o "r" pois somente queremos ler o arquivo
$abre = fopen("$dir/$arqs","r");
// Usamos fread agora para ler o arquivo
$arq = fread($abre,filesize("$dir/$arqs"));
$data_j = strtotime('2002-12-31');
$arq_tam = strlen($arq);
$arq_tipo = substr($arq,0,3);
$arq_ver = substr($arq,3,3);
$arq_dataj = substr($arq,6,5);
$arq_hora = substr($arq,11,5);
$arq_datajc = date('d/m/Y',strtotime('+'.$arq_dataj.'days',strtotime('2002-12-31')));
$arq_horac = gmdate("H:i:s",$arq_hora);
if ($arq_tipo == "002"){
print "Tamanho do arquivo: " . $arq_tam . "<br>";
print "Tipo do arquivo: " . $arq_tipo . "<br>";
print "Versão do arquivo: " . $arq_ver . "<br>";
print "Data do arquivo: " . $arq_dataj . "<br>";
print "Data Juliana convertida : " . $arq_datajc . "<br>";
print "Hora do arquivo: " . $arq_hora . "<br>";
print "Hora Convertida: " . $arq_horac . "<br>";
// VERIFICA O TIPO DO REGISTRO 002
if ($arq_ver == "001"){
if ($arq_tam < 129) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
//exit();
}
} else if ($arq_ver == "002"){
if ($arq_tam < 146) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
} else if ($arq_ver == "003"){
if ($arq_tam < 166) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
} else if ($arq_ver == "004"){
if ($arq_tam < 176) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
} else if ($arq_ver == "005"){
if ($arq_tam < 150) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
} else if ($arq_ver == "006"){
if ($arq_tam < 152) {
print "Tamanho do arquivo inválido...<br>";
print "------------------------------<br>";
// exit();
}
}
}
//IMPRIME NA TELA O RESULTADO
// echo $arq."<br>";
}//FECHA WHILE
}
// Fecha o diretorio
closedir($abredir);
Porém não está trazendo nenhum erro e em o resultado, onde pode está o erro....
Primeiro ative as mensagens de erro do PHP:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
?>
Se não for exibido nenhum erro vá debugando o seu código até encontrar o erro.
Exibe essa mensagem:
Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Sao_Paulo' for '-2.0/DST' instead in C:\Apache\htdocs\Estrela\LeV3LAN1.php on line 25
use isso no topo da pagina .. ou em algum lugar antes da funçao date ..
date_default_timezone_set("America/Sao_Paulo");
Se o servidor for local
pra não ter que colocar isso em todas as paginas que for usar funçao de data ..
basta alterar no php.ini ..
Abraços
Andrey,
Resolveu o erro mas a página está vindo em branco, não está retornando resultado algum...
Galera,
Agora testei dessa maneira:
<?php
mysql_connect("mysql", "", "") or die(mysql_error());
mysql_select_db("la") or die(mysql_error());
$dir = "UD_002_20110208";
if($handle = opendir($dir))
{
while($arq= readdir($handle))
{
clearstatcache();
if(is_file($dir.'/'.$arq))$arq = fopen ($arq, "r");
//LÊ O ARQUIVO ATÉ CHEGAR AO FIM
while (!feof ($arq)) {
//LÊ UMA LINHA DO ARQUIVO
$arq = fgets($arq, 4096);
$data_j = strtotime('2002-12-31');
$arq_tam = strlen($arq);
$arq_tipo = substr($arq,0,3);
$arq_ver = substr($arq,3,3);
$arq_apl = substr($arq,6,4);
$arq_emi = substr($arq,10,3);
$arq_rol = substr($arq,13,5);
$arq_vlr = substr($arq,18,7);
$arq_car = substr($arq,25,10);
$arq_mep = substr($arq,35,3);
$arq_mpd = substr($arq,38,10);
$arq_mem = substr($arq,48,10);
$arq_cep = substr($arq,58,3);
$arq_cpd = substr($arq,61,10);
$arq_cem = substr($arq,71,10);
$arq_dataj = substr($arq,81,5);
$arq_hora = substr($arq,86,5);
$arq_datajc = date('d/m/Y',strtotime('+'.$arq_dataj.'days',strtotime('2002-12-31')));
$arq_horac = gmdate("H:i:s",$arq_hora);
$arq_ass = substr($arq,91,4);
if ($arq_tipo == "003"){
$data = mysql_query("Select Descricao from apl WHERE Codigo = '$arq_apl' AND TipoAplicacao = $arq_emi");
$row = mysql_fetch_assoc($data);
if ($arq_hora < 50400) {
Print "TURNO 1<br>";
print "=====================================<br>";
print "Num. Onibus: " . $arq_car . "<br>";
print "Aplicação: " . $arq_apl ." - " .$row['Descricao'] . "<br>";
print "Emissor: " . $arq_emi . "<br>";
print "Quantidade: " . $arq_rol . "<br>";
print "valor: " . $arq_vlr . "<br>";
print "Data Juliana convertida : " . $arq_datajc . "<br>";
print "Hora do arquivo: " . $arq_hora . "<br>";
print "Hora Convertida: " . $arq_horac . "<br>";
print "=====================================<br>";
// VERIFICA O TIPO DO REGISTRO 002
} else {
Print "TURNO 2<br>";
print "=====================================<br>";
print "Num. Onibus: " . $arq_car . "<br>";
print "Aplicação: " . $arq_apl . "<br>";
print "Emissor: " . $arq_emi . "<br>";
print "Quantidade: " . $arq_rol . "<br>";
print "valor: " . $arq_vlr . "<br>";
print "Data Juliana convertida : " . $arq_datajc . "<br>";
print "Hora do arquivo: " . $arq_hora . "<br>";
print "Hora Convertida: " . $arq_horac . "<br>";
print "=====================================<br>"; }
}
}
//FECHA WHILE
//FECHA O PONTEIRO DO ARQUIVO
fclose ($ponteiro);
//=====================================================================================
}
closedir($handle);
}
?>
Porém está gerando essas mensagem, para todas as linhas dos arquivos....
Warning: feof(): supplied argument is not a valid stream resource in /home/lawebs/www/LeTXT1.php on line 20
Warning: fgets(): supplied argument is not a valid stream resource in /home/lawebs/www/LeTXT1.php on line 22
Alguém pode me ajudar?
Pra ler um diretorio você pode usar essa função
// Abre o diretorio $dir
$abredir = opendir($dir);
// Faz o loop para a exibição de usuários
while (false !== ($arqs = readdir($abredir))) {
// Aqui fazemos o php tirar "." e ".." que são "bugs" do readdir()
// Também faz com que só sejam abertos arquivos de texto
if ($arqs != "." && $arqs != ".." && preg_match("/\.(txt){1}$/i", $arqs, $ext)) {
// Agora iremos abrir arquivo por arquivo, e exibir os dados do usuário
// Usamos o "r" pois somente queremos ler o arquivo
$abre = fopen("$dir/$arqs","r");
// Usamos fread agora para ler o arquivo
$le = fread($abre,filesize("$dir/$arqs"));
// Agora vem o grande truque, separamos os dados pelo "|" com explode
// Fecha o diretorio