jorgeN 0 Denunciar post Postado Maio 27, 2011 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
Quelipe 15 Denunciar post Postado Maio 27, 2011 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
jorgeN 0 Denunciar post Postado Maio 27, 2011 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 15 Denunciar post Postado Maio 27, 2011 Então, agora é só fazer a leitura de cada um e gravar. at+ Compartilhar este post Link para o post Compartilhar em outros sites
jorgeN 0 Denunciar post Postado Maio 27, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 27, 2011 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 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
jorgeN 0 Denunciar post Postado Maio 28, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 28, 2011 Qual erro ? Compartilhar este post Link para o post Compartilhar em outros sites
jorgeN 0 Denunciar post Postado Maio 28, 2011 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 Knupp Vital 136 Denunciar post Postado Maio 28, 2011 Isso e porque parece não ter nenhum conteúdo delimitado por | em seus txt's, você visualizou o formato que eu postei ? Compartilhar este post Link para o post Compartilhar em outros sites
jorgeN 0 Denunciar post Postado Maio 28, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 28, 2011 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
jorgeN 0 Denunciar post Postado Maio 28, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Maio 28, 2011 Não, você tem o diretorio loja_des criado ? Compartilhar este post Link para o post Compartilhar em outros sites
jorgeN 0 Denunciar post Postado Maio 28, 2011 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
Kakashi_Hatake 267 Denunciar post Postado Maio 28, 2011 @Andrey Knupp Script testado e funcionando. @jorgeN Talvez você esteja fazendo algo errado. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 29, 2011 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