Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leandroauler

[Resolvido] Ler Arquivos

Recommended Posts

glob();

 

http://php.net/glob

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um while() cara..

o loop vai 'passar para o proximo'.

 

para abrir e ler, você pode fazer um fopen(), fread()..

http://php.net/fread

 

mas ainda assim o glob() é o começo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando dessa maneira:

 

<?php

$dir = "UD_002_20110208";

if($handle = opendir($dir))
{
   while($file = readdir($handle))
   {
       clearstatcache();
       if(is_file($dir.'/'.$file))
       echo $file;
       $fp = fopen($file, "r");
       while(!feof($fp)) {
             $linha = fgets($fp);
              if (!feof($fp)) {
              echo $linha."<br>";
               }
          }
       fclose($fp);
   }
   closedir($handle);
}

?> 

 

Porém está gerando esses erros:

 

Warning: fopen(..) [function.fopen]: failed to open stream: Permission denied in /home/lawebs/www/LeTXT5.php on line 12

Warning: feof(): supplied argument is not a valid stream resource in /home/lawebs/www/LeTXT5.php on line 13

Warning: fgets(): supplied argument is not a valid stream resource in /home/lawebs/www/LeTXT5.php on line 14

Warning: feof(): supplied argument is not a valid stream resource in /home/lawebs/www/LeTXT5.php on line 15

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leandro, é melhor você usar a função scandir ou a glob como o William recomendou.

 

Eu faria assim:

 

$dir_path = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'sua_pasta';

$list = scandir(  $dir_path );

foreach ( $list as $file )  {

$file_path = $dir_path . DIRECTORY_SEPARATOR . $file;

if ( is_file( $file_path ) ) {
	//
}
}

 

O que você quer fazer com os arquivos? Incluir conteúdo no final?

 

Eu prefiro usar as funções file_get_contents e file_put_contents em vez de fopen, são mais simples e fáceis de trabalhar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então no seu caso só a função file_get_contents resolve.

 

Tente assim:

 

$dir_path = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'sua_pasta';

$list = scandir(  $dir_path );

foreach ( $list as $file )  {

   	$file_path = $dir_path . DIRECTORY_SEPARATOR . $file;

   	if ( is_file( $file_path ) ) {
        	$content = file_get_contents( $file_path );
 	$sql = 'INSERT INTO tabela (arquivo) VALUES (\'' . mysql_real_scape_string( $content ) . '\')';
 	mysql_query( $sql ) or trigger_error( mysql_error() , E_USER_ERROR );
   	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leozitho,

 

Usei o seu exemplo e incrementei a leitura do arquivo, pois tenho que ler linha a linha e gravar no bd:

 



$dir_path = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'Arquivos/UD_20110131'; 

$list = scandir($dir_path); 

foreach ( $list as $file )  { 

       $file_path = $dir_path . DIRECTORY_SEPARATOR . $file; 
       if ( is_file( $file_path ) ) { 
           $arq = file_get_contents( $file_path ); 
		$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();
				 } 
			}
		}
	}
}


Porém a página está vindo em branco...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leozitho,

 

Não retornou nenhum erro...

 

Quando eu faço:

 

$dir_path = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'sua_pasta'; 

$list = scandir(  $dir_path ); 

foreach ( $list as $file )  { 

       $file_path = $dir_path . DIRECTORY_SEPARATOR . $file; 

       if ( is_file( $file_path ) ) { 
               $content = file_get_contents( $file_path ); 
               echo $content."<br>";
       } 
}

 

Ele imprime todas as linhas do arquivo TXT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa pegar linha por linha do arquivo? Neste caso é melhor usar a função file.

 

Ficaria assim:

 

if ( is_file( $file_path ) ) { 
$lines = file( $file_path );
foreach ( $lines as $line_num => $line ) {
	// Testando...
	printf( '<p><strong>Linha:</strong> %d<br /><strong>Conteúdo:</strong> %s</p>', $line_num, $line );
}
} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leozitho,

 

Dessa maneira funcionou, porém quando eu vou contar o tanho da linha "$arq_tam = strlen($arq);" ele conta 2 caracteres a mais para cada linha....:

 

$dir_path = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'ArquivosV3LAN/UD_20110131'; 

$list = scandir($dir_path); 

foreach ( $list as $file )  { 

       $file_path = $dir_path . DIRECTORY_SEPARATOR . $file; 
       if ( is_file( $file_path ) ) { 
          $lines = file( $file_path ); 
	   echo $file."<br>";  
          foreach ( $lines as $arq ) { 
           $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"){

		// VERIFICA O TIPO DO REGISTRO 002

			if ($arq_ver == "001"){
				 if ($arq_tam < 129) {
					 print "Tamanho do arquivo inválido...<br>";
					 print "------------------------------<br>";
				} else {
					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>";
				 }
					 //exit();
			} 
			else if ($arq_ver == "002"){
				 if ($arq_tam < 146) {
					 print "Tamanho do arquivo inválido...<br>";
					 print "------------------------------<br>";
					// exit();
				} else {
					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>";
				 }
					 //exit();
			} else if ($arq_ver == "003"){
				 if ($arq_tam < 166) {
					 print "Tamanho do arquivo inválido...<br>";
					 print "------------------------------<br>";
					// exit();
				} else {
					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>";
				 }
					 //exit();
			}  else if ($arq_ver == "004"){
				 if ($arq_tam < 176) {
					 print "Tamanho do arquivo inválido...<br>";
					 print "------------------------------<br>";
					// exit();
				} else {
					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>";
				 }
					 //exit();
			}  else if ($arq_ver == "005"){
				 if ($arq_tam < 150) {
					 print "Tamanho do arquivo inválido...<br>";
					 print "------------------------------<br>";
					// exit();
				} else {
					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>";
				 }
					 //exit();
			}  else if ($arq_ver == "006"){
				 if ($arq_tam < 152) {
					 print "Tamanho do arquivo inválido...<br>";
					 print "------------------------------<br>";
					 // exit();
				 } else {
					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>";
				 }
					 //exit();
			} 

		}


       } 


	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O var_dump($arq) coloca dois caracteres a mais também, onde está string(28) deveria ser string(26) e assim por diante:

 

string(28) "10000100200000480010010000
"

string(101) "001001002000004800100202971218820000000209405000000000000000000000000000000000000000000000000000000
"

string(62) "010001002002000020940500000186260000048001029712188900100000
"

string(62) "010001002002000020940500000186260000048001029712189800200000
"

string(68) "005001029712190100201002203601000000000035591924921011002000150000
"

string(101) "001001002000004800100302971228650020000209405000001862600200002094050000018626024140199800100110000


Compartilhar este post


Link para o post
Compartilhar em outros sites

Leozitho/William Bruno,

 

Obrigadão pela ajuda de vocês... Funcionou e consegui fazer também com While e Fopen:

 

ini_set('display_errors', 1); 
error_reporting(E_ALL | E_STRICT);

$dir = "Arquivos";

if($handle = opendir($dir))
{
   while($file = readdir($handle)){
       clearstatcache();
       if(is_file($dir.'/'.$file)){
	echo $file."<br>";
	$abre = fopen($dir.'/'.$file, "r");
	while (!feof ($abre)) {
		//LÊ UMA LINHA DO ARQUIVO
		$arq = fgets($abre, 4096);
		//=============================================================================================================
		$arq = str_replace(PHP_EOL, '', $arq);
		$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"){

		// 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();
				 } 
			}
		}
		//=============================================================================================================
	}		
       fclose ($abre);
	}
   }
   closedir($handle);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.