Carcleo 4 Denunciar post Postado Julho 3, 2012 Pessoal, boa tarde. Como eu faço para ler um arquivo txt em um diretório qualquer. Tipo, eu tenho o script abaixo que recebe um $_file via post do form. Mas, para isso, o arquivbo precisa ser movido do pc do usuario para o diretório do arquivo que contem esse código. Sem fazer esse upload, seria possivel ler esse txt? <?php if ($_GET["acao"]=="atualisa") { $arquivo = $_FILES["arquivo"]; $nome = $arquivo["name"]; $tipo = $arquivo["type"]; if($tipo == "text/plain") { if($nome == "teste.txt") { //Fizemos todos os testes e esta tudo certo. $arq = fopen($nome,'r'); // abre arquivo $soma = 0; // para somar as compras //LÊ O ARQUIVO ATÉ CHEGAR AO FIM while (!feof ($arq)) { //LÊ UMA LINHA DO ARQUIVO $linha = fgets($arq, 4096); //IMPRIME NA TELA O RESULTADO echo $linha."<br>"; }//FECHA WHILE //FECHA O PONTEIRO DO ARQUIVO fclose ($arq); } else { echo "<table align=\"center\" width=\"600px\" height=\"600px\"><tr><td align=\"center\" valign=\"middle\">"; echo "O arquivo deve se chamar teste.txt.<br>Tente novamente!"; echo "<br /><br />"; echo "Redirecionando em 10 segundos..."; echo "</td></tr></table>"; header("refresh: 10; url=?acao=form"); } } else { echo "<table align=\"center\" width=\"600px\" height=\"600px\"><tr><td align=\"center\" valign=\"middle\">"; echo "O arquivo deve ser de texto do tipo txt(bloco de notas).<br>Tente novamente!"; echo "<br /><br />"; echo "Redirecionando em 10 segundos..."; echo "</td></tr></table>"; header("refresh: 10; url=?acao=form"); } } ?> <?php if ($_GET["acao"]=="form") { ?> <form name="txt_arquvo" action="?acao=atualisa" method="post" enctype="multipart/form-data"> <input type="file" name="arquivo" /> <input type="submit" value="Atualisar"/> </form> <?php } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme Oderdenge 42 Denunciar post Postado Julho 4, 2012 Sem fazer esse upload, seria possivel ler esse txt? Não. Você terá que fazer o upload. O PHP é uma linguagem server-side, o que significa que ela não se comunica com o cliente, mas sim com o servidor. Uma solução rápida pra isso é você upar o arquivo, carregar o texto dinamicamente na tela e no mesmo instante deletar o arquivo. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 4, 2012 Ok. Consegui fazer da forma abaixo. Agora, gostaria de saber se há uma forma de conseguir o mesmo resultado com menos linhas de código. Ou seja, optimizar esse código. Será que tem como melhorar ele? <?php if ($_GET["acao"]=="atualisa") { if(isset($_FILES["arquivo"])) { $arquivo = $_FILES["arquivo"]; $nome = $arquivo["name"]; $tipo = $arquivo["type"]; if($tipo == "text/plain") { if($nome == "estoque.txt") { //Fizemos todos os testes e esta tudo certo. $arq = fopen($nome,'r'); // abre arquivo $soma = 0; // para somar as compras $diretorio = "estoque/"; if(move_uploaded_file($_FILES["arquivo"]["tmp_name"], $diretorio . $_FILES["arquivo"]["name"])) { //LÊ O ARQUIVO ATÉ CHEGAR AO FIM while($linha = fgets($arq)) // Lê linha por linha { $linha_cada = explode('|', $linha); //BUSCA NA BASE A COMBINAÇÃO COM CADA CODIGO $busca_string= " select produtos.id_produtos, produtos.nome_produtos, produtos.referencia_produtos, tamanhos.nome_tamanhos from produtos inner join tamanhos on produtos.id_tamanhos_produtos = tamanhos.id_tamanhos where produtos.referencia_produtos='$linha_cada[0]' and produtos.nome_produtos='$linha_cada[1]' and tamanhos.nome_tamanhos='$linha_cada[2]' "; $busca_query= $conexao->query($busca_string); if ($busca_query->num_rows>0) { list( $id_produtos, $nome_produtos, $referencia_produtos, $nome_tamanhos )=$busca_query->fetch_row(); $atualisa_estoque_string = " update produtos set estoque_produtos=".$linha_cada[3]." where id_produtos=".$id_produtos; $atualisa_estoque_query = $conexao->query($atualisa_estoque_string); } } //FIM DO WHILE echo "<table align=\"center\" width=\"600px\" height=\"600px\"><tr><td align=\"center\" valign=\"middle\">"; echo "Estoque atualizado na base de dados!"; echo "<br /><br />"; echo "Redirecionando em 10 segundos..."; echo "</td></tr></table>"; header("refresh: 10; url=?acao=form"); } else { echo "<table align=\"center\" width=\"600px\" height=\"600px\"><tr><td align=\"center\" valign=\"middle\">"; echo "Aconteceu um erro impevisto.<br>Tente novamente!"; echo "<br /><br />"; echo "Redirecionando em 10 segundos..."; echo "</td></tr></table>"; header("refresh: 10; url=?acao=form"); } fclose ($arq); } else { echo "<table align=\"center\" width=\"600px\" height=\"600px\"><tr><td align=\"center\" valign=\"middle\">"; echo "O arquivo deve se chamar teste.txt.<br>Tente novamente!"; echo "<br /><br />"; echo "Redirecionando em 10 segundos..."; echo "</td></tr></table>"; header("refresh: 10; url=?acao=form"); } } else { echo "<table align=\"center\" width=\"600px\" height=\"600px\"><tr><td align=\"center\" valign=\"middle\">"; echo "O arquivo deve ser de texto do tipo txt(bloco de notas).<br>Tente novamente!"; echo "<br /><br />"; echo "Redirecionando em 10 segundos..."; echo "</td></tr></table>"; header("refresh: 10; url=?acao=form"); } } else { echo "<table align=\"center\" width=\"600px\" height=\"600px\"><tr><td align=\"center\" valign=\"middle\">"; echo "Você não enviu arquivo algum.<br>Tente novamente!"; echo "<br /><br />"; echo "Redirecionando em 10 segundos..."; echo "</td></tr></table>"; header("refresh: 10; url=?acao=form"); } } ?> <?php if ($_GET["acao"]=="form") { ?> <h1 style="text-align:center">Atualizar estoque do site</h1> <h1><br /> </h1> <h2 style="text-align:center">Abra a caixa abaixo escolha o arquivo teste.txt e clike em atualizar</h2> <h1><br /> </h1> <div style="display:block; text-align:center" id="form"> <form name="txt_arquvo" action="?acao=atualisa" method="post" enctype="multipart/form-data"> <input type="file" name="arquivo" class="botoes" /><br /><br /> <input type="submit" value="Atualisar" onclick="javascript: abre('enviando');" /> </form> </div> <br /> <div style="display:none; text-align:center" id="enviando"> <img width='120px' src='figuras/enviando.gif' title='Atualizando, aguarde' alt='Atualizando, aguarde' style='align:center' /> </div> <?php } ?> <?php $conexao->close(); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme Oderdenge 42 Denunciar post Postado Julho 4, 2012 Cara, você conhece o Code Review, do Stack Exchange? É um Q&A destinado à melhorias de código. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 4, 2012 Não. Não conheço. Mas acessei o site e não achei local para colocar o código lá. O que seria este site? Uma especie de fórum de discuções igual ao Imasters? Gosto muito do Imasters. Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme Oderdenge 42 Denunciar post Postado Julho 4, 2012 Não, Carcleo, não é um fórum de discussões. Como lhe falei, você postará o seu código lá e eles lhe ajudarão a melhorá-lo. Para isso, você deve criar uma conta e então criar um thread. Compartilhar este post Link para o post Compartilhar em outros sites