Ir para conteúdo

POWERED BY:

Arquivado

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

jorgeN

Salvar TXT remotamente

Recommended Posts

Saudação à todos!

Me deparei com uma situação que não sei como resolver.

 

1º Usando PHP, preciso escolher um TXT de uma pasta do computador local e transferir para o provedor.

2º No provedor, (pelo sistema em PHP) selecionar determinado arquivo (todos terão nomes diferentes)

3º Abrir e gravar em uma tabela

 

Obs: Abrir e gravar, sei como fazer, porem não posso definir um nome fixo para abrir, já que são vários arquivos com nomes aleatórios.

Ex: Localmente terei Aquivo1, Arquivo2, Arquivo3 ........ envio todos para o provedor. Lá vou abrindo um a um, mas a rotina para abrir terá que ler o nome e renomear para o nome padrão definido pelo programa.

 

Aguardo ajuda de alguem e espero ter explicado o que preciso.

 

Abraço à todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você estiver colocando os arquivos dentro de uma determinada pasta, basta ler o conteúdo dela.

 

$open  = opendir($pasta); // pasta que estão os arquivos
while(false !==($arquivo = readdir($open))) {
if($arquivo == "." || $arquivo == ".." ){
	continue;
       }
       echo $arquivo;
}

 

at+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Quelipe

Seu exemplo mostrou os arquivos, porém tudo na horizontal.

O que preciso é que mostre como no explorer e que clicando no arqivo, envie para endereço remoto, pois é lá que vou efetivamente abrir o arquivo, ler e gravar em tabela.

 

Se você tiver um exemplo, fico muito agradecido.

 

Até+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quelipe, acho que não consegui explicar direito:

preciso enviar um TXT local para um provedor onde está o banco de dados e o sistema (www.provedor.com.br/public_html)

Aí pelo sistema, tenho que escolher qual TXT vou ler, para transformar seus registros e gravar em tabela do MySQL.

Seria como um FTP embutido em rotina em PHP

 

Tem como fazer ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok jorgeN, você tem tal txt, precisa enviar ele em certo momento.

Pra o servidor FTP que lá vai transformar ele em registros ?

Ou você precisa ler um diretorio local, encontrar todos os arquivos

TXT, mandar pro servidor externo ( FTP ) é transformar em registros ?

 

Eu entendi foi o seguinte:

Você tem um diretorio com vários arquivos txt ..

e precisa extrair o conteúdo de cada um deles, então eu montei meu esquema assim

tree.jpg

em cada txt, eu tenho o seguinte conteúdo

linha1|linha1|linha1|linha1|arquivo0
linha2|linha2|linha2|linha2|arquivo0
linha3|linha3|linha3|linha3|arquivo0
linha4|linha4|linha4|linha4|arquivo0
linha5|linha5|linha5|linha5|arquivo0
linha6|linha6|linha6|linha6|arquivo0
linha7|linha7|linha7|linha7|arquivo0
linha8|linha8|linha8|linha8|arquivo0

o arquivo0, não é necessário, coloquei só de exemplo

é então, já que e a sua duvida, montar o insert na tabela com o conteúdo desses arquivos

o código ficou assim:

<!doctype html>
<html>
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8858-1" />
   </head>
   <body>
       <?php
               foreach( glob( 'txt/*.txt' ) as $arquivo ){
                        $fp = fopen( $arquivo, 'r+' );
                        while( $txt = fscanf( $fp, '%s' ) ){
                               $dados[ preg_replace( '/txt\//', null, $arquivo ) ][] = reset( $txt );
                        }
               }
               echo '<pre>';
               foreach( array_filter( $dados ) as $key => $data ){
                        for( $i = 0; $i < sizeOf( $dados[ $key ] ); ++$i ){
                             $contents[ $key ][ $i ] = explode( '|', $dados[ $key ][ $i ] );
                        }
               }
               foreach( $contents as $index => $data ){
                        for( $x = 0; $x < sizeOf( $data ); ++$x ){
                             $valores[ $index ][] =  '('. implode( ',', $contents[ $index ][ $x ] ).')';
                        }
               }
               for( $j = 0; $j < sizeOf( $valores ); ++$j ){
                    foreach( $valores as $key => $data ){
                             $SQL[] = $data[ $j ];
                    }
               }
               echo 'INSERT INTO `...`( ... ) VALUES',implode( ',', array_filter( $SQL ) );
       ?>
   </body>
</html>

o Retorno foi:

INSERT INTO `...`( ... ) VALUES 
(linha1,linha1,linha1,linha1,arquivo0),(linha1,linha1,linha1,linha1,arquivo1),
(linha1,linha1,linha1,linha1,arquivo2),(linha1,linha1,linha1,linha1,arquivo3),
(linha1,linha1,linha1,linha1,arquivo4),(linha1,linha1,linha1,linha1,arquivo5),
(linha1,linha1,linha1,linha1,arquivo6),(linha1,linha1,linha1,linha1,arquivo7),
(linha1,linha1,linha1,linha1,arquivo8),(linha1,linha1,linha1,linha1,arquivo9),
(linha2,linha2,linha2,linha2,arquivo0),(linha2,linha2,linha2,linha2,arquivo1),
(linha2,linha2,linha2,linha2,arquivo2),(linha2,linha2,linha2,linha2,arquivo3),
(linha2,linha2,linha2,linha2,arquivo4),(linha2,linha2,linha2,linha2,arquivo5),
(linha2,linha2,linha2,linha2,arquivo6),(linha2,linha2,linha2,linha2,arquivo7),
(linha2,linha2,linha2,linha2,arquivo8),(linha2,linha2,linha2,linha2,arquivo9),
(linha3,linha3,linha3,linha3,arquivo0),(linha3,linha3,linha3,linha3,arquivo1),
(linha3,linha3,linha3,linha3,arquivo2),(linha3,linha3,linha3,linha3,arquivo3),
(linha3,linha3,linha3,linha3,arquivo4),(linha3,linha3,linha3,linha3,arquivo5),
(linha3,linha3,linha3,linha3,arquivo6),(linha3,linha3,linha3,linha3,arquivo7),
(linha3,linha3,linha3,linha3,arquivo8),(linha3,linha3,linha3,linha3,arquivo9),
(linha4,linha4,linha4,linha4,arquivo0),(linha4,linha4,linha4,linha4,arquivo1),
(linha4,linha4,linha4,linha4,arquivo2),(linha4,linha4,linha4,linha4,arquivo3),
(linha4,linha4,linha4,linha4,arquivo4),(linha4,linha4,linha4,linha4,arquivo5),
(linha4,linha4,linha4,linha4,arquivo6),(linha4,linha4,linha4,linha4,arquivo7),
(linha4,linha4,linha4,linha4,arquivo8),(linha4,linha4,linha4,linha4,arquivo9),
(linha5,linha5,linha5,linha5,arquivo0),(linha5,linha5,linha5,linha5,arquivo1),
(linha5,linha5,linha5,linha5,arquivo2),(linha5,linha5,linha5,linha5,arquivo3),
(linha5,linha5,linha5,linha5,arquivo4),(linha5,linha5,linha5,linha5,arquivo5),
(linha5,linha5,linha5,linha5,arquivo6),(linha5,linha5,linha5,linha5,arquivo7),
(linha5,linha5,linha5,linha5,arquivo8),(linha5,linha5,linha5,linha5,arquivo9),
(linha6,linha6,linha6,linha6,arquivo0),(linha6,linha6,linha6,linha6,arquivo1),
(linha6,linha6,linha6,linha6,arquivo2),
(linha6,linha6,linha6,linha6,arquivo3),(linha6,linha6,linha6,linha6,arquivo4),
(linha6,linha6,linha6,linha6,arquivo5),(linha6,linha6,linha6,linha6,arquivo6),
(linha6,linha6,linha6,linha6,arquivo7),(linha6,linha6,linha6,linha6,arquivo8),
(linha6,linha6,linha6,linha6,arquivo9),(linha7,linha7,linha7,linha7,arquivo0),
(linha7,linha7,linha7,linha7,arquivo1),(linha7,linha7,linha7,linha7,arquivo2),
(linha7,linha7,linha7,linha7,arquivo3),(linha7,linha7,linha7,linha7,arquivo4),
(linha7,linha7,linha7,linha7,arquivo5),(linha7,linha7,linha7,linha7,arquivo6),
(linha7,linha7,linha7,linha7,arquivo7),(linha7,linha7,linha7,linha7,arquivo8),
(linha7,linha7,linha7,linha7,arquivo9),(linha8,linha8,linha8,linha8,arquivo0),
(linha8,linha8,linha8,linha8,arquivo1),(linha8,linha8,linha8,linha8,arquivo2),
(linha8,linha8,linha8,linha8,arquivo3),(linha8,linha8,linha8,linha8,arquivo4),
(linha8,linha8,linha8,linha8,arquivo5),(linha8,linha8,linha8,linha8,arquivo6),
(linha8,linha8,linha8,linha8,arquivo7),(linha8,linha8,linha8,linha8,arquivo8),
(linha8,linha8,linha8,linha8,arquivo9)    

 

Creio que agora, com um pouco de esforço, você dê uma estudada na forma que eu fiz

pra você chegar ao resultado que você deseja ..

 

 

@Quelipe, não precisa disso, você pode usar um glob

que vai retornar o path de todos os arquivos

normalmente ! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado.

Vou estudar o código. É bem isso que preciso. Agora é só adequar.

 

Só está dando um erro na linha $dados usando preg_replace, mas vou analisar e entender melhor.

Obrigado pela força.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui onde você definiu como txt conforme seu exemplo, troquei por loja_des que é a pasta onde estão os arquivos

Alterei também na linha após o while.

Como eu não entendo o preg_replace é que estou com dificuldade.

Outro detalhe, é que mais adiante você tem a variavel $data que não é definida, porém o erro ainda é na linha 27 por enquanto.

 

foreach( glob( 'loja_des/*.txt' ) as $arquivo ){

$fp = fopen( $arquivo, 'r+' );

while( $txt = fscanf( $fp, '%s' ) ){

$dados[ preg_replace( '/loja_des\//', null, $arquivo ) ][] = reset( $txt );

 

Notice: Undefined variable: dados in C:\Arquivos de programas\EasyPHP 2.0b1\www\lendotexto.php on line 27

 

em razão deste erro, os demais são consequencia

Warning: Invalid argument supplied for foreach() in C:\Arquivos de programas\EasyPHP 2.0b1\www\lendotexto.php on line 27

 

Notice: Undefined variable: contents in C:\Arquivos de programas\EasyPHP 2.0b1\www\lendotexto.php on line 32

 

Warning: Invalid argument supplied for foreach() in C:\Arquivos de programas\EasyPHP 2.0b1\www\lendotexto.php on line 32

 

Notice: Undefined variable: valores in C:\Arquivos de programas\EasyPHP 2.0b1\www\lendotexto.php on line 37

 

aqui eu não tratei ainda

INSERT INTO `...`( ... ) VALUES

Notice: Undefined variable: SQL in C:\Arquivos de programas\EasyPHP 2.0b1\www\lendotexto.php on line 42

 

Warning: array_filter() [function.array-filter]: The first argument should be an array in C:\Arquivos de programas\EasyPHP 2.0b1\www\lendotexto.php on line 42

 

Warning: implode() [function.implode]: Bad arguments. in C:\Arquivos de programas\EasyPHP 2.0b1\www\lendotexto.php on line 42

 

Na verdade, estou apanhando por não ter dominio deste detalhe

Se você tiver solução, fico imensamente agradecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey

Criei o TXT conforme seu exemplo, mas não vai.

Vou ter que estudar bem este assunto.

Agradeço muito pela atenção que você deu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muito estranho ..

Eu testei com o nome do txt que você deu, e funcionou perfeitamente ..

 

Roda o seguinte código ai:

<!DOCTYPE html>
<html>
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
       <title></title>
   </head>
   <body>
       <?php
$conteudo = <<<CONTEUDO
item1|item2|item3|item4
item1|item2|item3|item4
CONTEUDO;
           for( $i = 0; $i < 11; ++$i ){
                file_put_contents( "loja_des/arquivo$i.txt", $conteudo );
                echo 'Escrevendo no arquivo'.$i.'.txt', '<br />';
           }
       ?>
   </body>
</html>

Antes copia tudo que você tem na pasta, deixe a pasta vazia pro PHP

escrever nos arquivos lá dentro

 

Então depois que ele criar 10 arquivos dentro dessa pasta, execute o código:

<!DOCTYPE html>
<html>
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
       <title></title>
   </head>
   <body>
       <?php 
               $glob = glob( 'loja_des/*.txt' );
               foreach( $glob as $arquivo ){
                        if( count( $glob ) == 0 ){
                            echo 'Não existe nenhum arquivo para ser processado';
                            break;
                        }
                        $fp = fopen( $arquivo, 'r+' );
                        while( $txt = fscanf( $fp, '%s' ) ){
                               $dados[ $arquivo ][] = reset( $txt );
                        }
               }
               echo '<pre>';
               foreach( array_filter( $dados ) as $key => $data ){
                        for( $i = 0; $i < sizeOf( $dados[ $key ] ); ++$i ){
                             $contents[ $key ][ $i ] = explode( '|', $dados[ $key ][ $i ] );
                        }
               }
               foreach( $contents as $index => $data ){
                        for( $x = 0; $x < sizeOf( $data ); ++$x ){
                             $valores[ $index ][] =  '('. implode( ',', $contents[ $index ][ $x ] ).')';
                        }
               }
               for( $j = 0; $j < sizeOf( $valores ); ++$j ){
                    foreach( $valores as $key => $data ){
                             $SQL[] = $data[ $j ];
                    }
               }
               echo 'INSERT INTO `...`( ... ) VALUES',implode( ',', array_filter( $SQL ) );
       ?>
   </body>
</html>

 

Minha saída foi a seguinte:

INSERT INTO `...`( ... ) VALUES
(item1,item2,item3,item4),(item1,item2,item3,item4),(item1,item2,item3,item4),
(item1,item2,item3,item4),(item1,item2,item3,item4),(item1,item2,item3,item4),
(item1,item2,item3,item4),(item1,item2,item3,item4),(item1,item2,item3,item4),
(item1,item2,item3,item4),(item1,item2,item3,item4),(item1,item2,item3,item4),
(item1,item2,item3,item4),(item1,item2,item3,item4),(item1,item2,item3,item4),
(item1,item2,item3,item4),(item1,item2,item3,item4),(item1,item2,item3,item4),
(item1,item2,item3,item4),(item1,item2,item3,item4),(item1,item2,item3,item4),
(item1,item2,item3,item4)    

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vai mesmo. Entrego os pontos. Agora dá esse erro:

Warning: file_put_contents(loja_des/arquivo0.txt) [function.file-put-contents]: failed to open stream: No such file or directory in C:\Arquivos de programas\EasyPHP 2.0b1\www\andrey.php on line 12

Escrevendo no arquivo0.txt

 

Deve ser relacionado com a função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, criei arquivo0 e arquivo1 na pasta loja_des e na pasta mferrari

Testei com as duas pastas

 

$glob = glob( 'MFerrari/*.txt' );

foreach( $glob as $arquivo ){

if( count( $glob ) == 0 ){

echo 'Não existe nenhum arquivo para ser processado';

VEJA QUE NESTA LINHA PASSA. O QUE ENTENDO É QUE ENCONTROU OS ARQUIVOS

break;

}

$fp = fopen( $arquivo, 'r+' );

while( $txt = fscanf( $fp, '%s' ) ){

$dados[ $arquivo ][] = reset( $txt );

}

}

echo '<pre>';

AQUI DOU UM ECHO EM $DADOS, MAS NADA MOSTRA, OU SEJA, NESTE WHILE NADA É DEFINIDO

foreach( array_filter( $dados ) as $key => $data ){

O ERRO DÁ NESTA LINHA

Notice: Undefined variable: dados in C:\Arquivos de programas\EasyPHP 2.0b1\www\andrey.php on line 24

 

Por não entender a lógica deste código é que estou ficando doido já. Os arquivos TXT estão como você definiu. Não entendo porque só para você dá certo.

Vou continuar estudando esse seu exemplo até dar certo. Deve ser um detalhe pequeno.

Agradeço muito sua atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kara, to quase afirmando que isso é problema do teu servidor

Eu testei em 2 Servidores, no local e externo, ate registrei os dados

retornados no banco de dados do servidor externo e foi certinho ..

Você já tentou instalar o PHP Manualmente sem ser esse pacotes ?

Ou usar um pacote diferente, tipo XAMPP ? Wampp :o

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.