Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera,
Possuo um diretório "files" onde tenho 10 arquivos do tipo "TXT", preciso abrir o diretório e ler arquivo por arquivo.
Alguém tem idéia de como posso fazer?
Leandro
William Bruno,
O glob() só procura os arquivos do tipo "txt", e para abrir, ler , fechar e passar para o proximo?
Essa é minha dúvida...
Obrigado,
Leandro
faz um while() cara..
o loop vai 'passar para o proximo'.
para abrir e ler, você pode fazer um fopen(), fread()..
mas ainda assim o glob() é o começo.
Para abrir os arquivos você pode usar a função file_get_contents. ;)
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
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.
Leozitho,
Preciso ler linha a linha e inserir no Banco...
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 );
}
}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...
Os erros estão habilitados? Se não estiver coloque isso no início do script:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);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.
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 );
}
}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();
}
}
}
}
}Dê um var_dump pra ver se existem caracteres sobrando, como espaços por exemplo.
echo '<pre>', PHP_EOL;
var_dump($arq);
echo '</pre>', PHP_EOL;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
É a quebra de linha.
Faça o seguinte:
$arq = str_replace(PHP_EOL, '', $arq);
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);
}
glob();
http://php.net/glob