GiSP 0 Denunciar post Postado Maio 17, 2011 Boa noite pessoal, estou com uma dúvida e gostaria da ajuda dos mais experientes se possível. Eu tenho um diretório com vários arquivos, mas quero listá-los, mas mostrando apenas os que possuem a extensão ".txt" por exemplo. Até aí pesquisei bastante e encontrei um código que consegue fazer isto sem problemas. Abaixo o script lista os arquivos, esconde os que possuem outras extensões e exibe apenas os que tem extensão ".txt" como eu queria e exibe eles como links: <? // Define um array para armazenar os arquivos $files = array(); // Diretório atual $d = dir('.'); // Percorre todos os arquivos while(false !== ($file = $d->read())){ // Se o arquivo não é este arquivo, e não começa com "." ou "~" // e não termina em LCK, então guarde-o para exibição futura. if(($file{0} != '.') && ($file{0} != '~') && (substr($file, -3) != 'LCK') && (substr($file, -3) != 'php') && (substr($file, -3) != 'jpg') && (substr($file, -3) != 'png') && (substr($file, -3) != 'gif') && ($file != basename($_SERVER['PHP_SELF'])) ) { // Guarda o nome do arquivo e dados completos de uma chamada // à stat() $files[$file] = stat($file); } } // Fecha o diretório $d->close(); // Agora vamos exibir o resultado em uma tabela echo '<style>td { padding-right: 10px; }</style>'; echo '<table><caption>Conteúdo deste diretório:</caption>'; // Ordenar os arquivos em ordem alfabética ksort($files); // Definir o horário brasileiro: date_default_timezone_set('Brazil/East'); // Percorremos os arquivos, exibindo uma nova linha na tabela // para cada um deles. foreach ($files as $name => $stats) { //$name = preg_replace('/\.[^.]*$/', '', $name); (aqui tentei fazer com que o arquivo aparecesse sem a extensão, funcionou, mas se clicar no link depois, não encontra nada) // Inicia a linha e exibe um link com o nome do arquivo echo "<tr><td><a href=\"{$name}\">{$name}</a></td>\n"; // Uma célula com o tamanho do arquivo echo "<td align='right'>{$stats['size']}</td>\n"; // Uma coluna com a data de criação do arquivo echo '<td>', date('d/m/Y h:ia', $stats['mtime']), "</td></tr>\n"; } echo '</table>'; ?> Daí em diante começa o meu problema! O código exibe os arquivos que eu quero como links, mas mostra a extensão e eu queria que não mostrasse, deixando apenas o nome do arquivo. Onde eu comentei em vermelho eu tentei fazer com que não mostre a extensão e deu certo, mas quando você clica no link, dá erro pois como o link criado é sem extensão nenhuma, não existe no servidor e aí dá uma página de erro. O que eu queria conseguir fazer é o seguinte: Listar os arquivos, somente com as extensões que eu quero - isso já deu certo Listar os arquivos e exibir em forma de links - isso já deu certo Listar os arquivos, escondendo a extensão, deixando só o nome do arquivo - isso não deu certo ainda Exibir o arquivo, sem a extensão, em forma de link e abrindo em uma nova janela quando for clicado isso não deu certo ainda Esta seria a primeira parte. Conseguindo fazer isto, eu gostaria da ajuda de vocês para o seguinte: Os arquivos que vão aparecer na listagem, são todos ".txt". Com vários campos de texto em cada um deles. Então, eu queria fazer com que ao clicar no link gerado, a nova página que abrisse, pegasse os dados deste txt que foi clicado, mas exibisse os dados dele por exemplo, da 10ª linha em diante. Sei que da pra fazer isso mas não sei como fazer. Então é isso se alguém puder dar uma forcinha nisso eu fico agradecida. Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme Oderdenge 42 Denunciar post Postado Maio 17, 2011 Boa noite, GiSP. Se possível, da próxima vez, diga-nos o erro que ocorre ao executar o seu script. Mas enfim, dei uma mexida por cima no seu script. Por favor, teste e diga-me se funcionou: <? // Define um array para armazenar os arquivos $files = array(); // Diretório atual $d = dir('.'); // Percorre todos os arquivos while(false !== ($file = $d->read())){ // Se o arquivo não é este arquivo, e não começa com "." ou "~" // e não termina em LCK, então guarde-o para exibição futura. if(($file{0} != '.') && ($file{0} != '~') && (substr($file, -3) != 'LCK') && (substr($file, -3) != 'php') && (substr($file, -3) != 'jpg') && (substr($file, -3) != 'png') && (substr($file, -3) != 'gif') && ($file != basename($_SERVER['PHP_SELF'])) ) { // Guarda o nome do arquivo e dados completos de uma chamada // à stat() $files[$file] = stat($file); } } // Fecha o diretório $d->close(); // Agora vamos exibir o resultado em uma tabela echo '<style>td { padding-right: 10px; }</style>'; echo '<table><caption>Conteúdo deste diretório:</caption>'; // Ordenar os arquivos em ordem alfabética ksort($files); // Definir o horário brasileiro: date_default_timezone_set('Brazil/East'); // Percorremos os arquivos, exibindo uma nova linha na tabela // para cada um deles. foreach ($files as $name => $stats) { //$name = preg_replace('/\.[^.]*$/', '', $name); // Inicia a linha e exibe um link com o nome do arquivo echo "<tr><td><a href=\"{$files}\">{$name}</a></td>\n"; // Uma célula com o tamanho do arquivo echo "<td align='right'>{$stats['size']}</td>\n"; // Uma coluna com a data de criação do arquivo echo '<td>', date('d/m/Y h:ia', $stats['mtime']), "</td></tr>\n"; } echo '</table>'; ?> Com relação a segunda dúvida você quer que apareça o arquivo txt, mas que só exiba o conteúdo a partir da 10ª linha? É isso? Abraços! ;) Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 17, 2011 Imaginando o seguinte txt: linha1 linha2 linha3 linha4 linha5 linha6 linha7 linha8 linha9 linha10 linha11 linha12 linha13 linha14 linha15 Código: <?php echo '<pre>'; foreach( glob( '*.txt' ) as $file ){ $fp = fopen( $file, 'r+' ); while( $data = fscanf( $fp, '%s' ) ){ $contents[] = reset( $data ); } } print_r( $contents ); for( $i = 10; $i < count( $contents ); ++$i ){ echo $contents[$i], '<br />'; } ?> Saída: Array ( [0] => linha1 [1] => linha2 [2] => linha3 [3] => linha4 [4] => linha5 [5] => linha6 [6] => linha7 [7] => linha8 [8] => linha9 [9] => linha10 [10] => linha11 [11] => linha12 [12] => linha13 [13] => linha14 [14] => linha15 ) linha11 linha12 linha13 linha14 linha15 Agora se você trabalha com uma grande quantidade de arquivos, e precise identificar aonde se encontra tal linha, você pode fazer o seguinte: <?php echo '<pre>'; foreach( glob( '*.txt' ) as $file ){ $fp = fopen( $file, 'r+' ); while( $data = fscanf( $fp, '%s' ) ){ $contents[$file][] = reset( $data ); } $files[] = $file; } foreach( $files as $file ){ for( $i = 10; $i < count( $contents[$file] ); ++$i ){ echo $contents[$file][$i], '<br />'; } } Saída: Array ( [arquivo.txt] => Array ( [0] => linha1 [1] => linha2 [2] => linha3 [3] => linha4 [4] => linha5 [5] => linha6 [6] => linha7 [7] => linha8 [8] => linha9 [9] => linha10 [10] => linha11 [11] => linha12 [12] => linha13 [13] => linha14 [14] => linha15 ) [arquivo_1.txt] => Array ( [0] => linha1 [1] => linha2 [2] => linha3 [3] => linha4 [4] => linha5 [5] => linha6 [6] => linha7 [7] => linha8 [8] => linha9 [9] => linha10 [10] => linha11 [11] => linha12 [12] => linha13 [13] => linha14 [14] => linha15 ) ) arquivo.txt linha11 linha12 linha13 linha14 linha15 arquivo_1.txt linha11 linha12 linha13 linha14 linha15 Compartilhar este post Link para o post Compartilhar em outros sites
GiSP 0 Denunciar post Postado Maio 18, 2011 Oi gente! Vcs são rapidos hein! Kaminari, testei sua modificação e acontece que a idéia é não mostrar a extensão do arquivo e está mostrando do mesmo jeito. Por exemplo, tenho no diretório o arquivo: meuexemplo.txt Quero que ele seja exibido apenas assim: meu exemplo Mas em formato de link, que ao ser clicado, consiga abrir o arquivo numa nova janela. Na sua alteração, continua mostrando a extensão do arquivo e ao ser clicado, não consegue abrir nada, pois tenta abrir o que mostra na barra de status apenas: http://localhost/meuteste/Array O que eu gostaria é que, os arquivos fossem listados, mas escondendo a extensão de cada um, em formato de link, para que quando for clicado, abra numa nova janela este arquivo. Neste meu diretório, todos os arquivos são ".txt": meuexemplo_01.txtmeuexemplo_02.txt meuexemplo_03.txt meuexemplo_04.txt Com vários campos de texto em cada um deles. Então, eu queria fazer com que ao clicar no link gerado, a nova página que abrisse, conseguisse pegar os dados deste link que foi clicado referente ao txt que está sendo listado como link e sem a extensão. Ao carregar esta página que foi clicada pelo link, exibisse os dados dele por exemplo, da 10ª linha em diante. Não sei como fazer isto, se é colocando um onclick no link chamando uma página php que vai ler o arquivo da linha 10 em diante e exibir. Na verdade é esta minha idéia mesmo, de listar os arquivos como links, mas sem a extensão, colocando um onclick ou alguma coisa, que chame uma página php, que vai conseguir ler este arquivo do link da linha 10 em diante, pois assim eu posso personalizar esta página chamada colocando um header e outras coisinhas pra deixar a página mais atraente. Então é isso, não sei se consegui ser clara o suficiente, basicamente é isso que estou tentando fazer mesmo. Fico agradecida pela ajuda mesmo! Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 18, 2011 Tá, apenas o link para cada arquivo TXT no dir ? <?php echo '<pre>'; foreach( glob( 'seudiretorio/*.txt' ) as $file ){ echo '<a href="http://localhost/meuteste/'.$file.'">', $file, '</a><br />'; } Saída: <a href="http://localhost/meuteste/arquivo.txt">arquivo.txt</a><br /> <a href="http://localhost/meuteste/arquivo_1.txt">arquivo_1.txt</a><br /> Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme Oderdenge 42 Denunciar post Postado Maio 18, 2011 GiSP, tentamos ser sempre os mais rápidos possíveis. :clap: Mas enfim, vamos novamente ao seu problema... o que acontece é a duplicação de extensão... ele dá erro porque o que está sendo aplicado no seu <a href="#"></a> é o arquivo sem a extensão (.txt). Tente fazer o seguinte, então: echo "<tr><td><a href=\"{$name}\".txt>{$name}</a></td>\n"; Quanto a segunda dúvida, o primeiro post do Andrey pode te ajudar, é só fazer algumas modificações. Abraços! ;) Compartilhar este post Link para o post Compartilhar em outros sites
GiSP 0 Denunciar post Postado Maio 18, 2011 Oi Kaminari, Então, conseguir listar os arquivos como links mostrando a extensão eu consigo normalmente, era assim mesmo que ele estava mostrando no código que coloquei primeiro. Mas o que eu queria saber é justamente se dá pra exibir como link sem a extensão, mas que ao ser clicado, mostre o arquivo em uma nova janela de alguma forma. Já quebrei a cabecinha pesquisando isso! Aí depois, na parte que vai exibir como link o arquivo listado, é onde eu queria fazer o que falei do link, quando for clicado, chamar uma página, onde vai exibir o arquivo a partir da linha 10, etc. O código originalmente era assim: <?// Define um array para armazenar os arquivos $files = array(); // Diretório atual $d = dir('.'); // Percorre todos os arquivos while(false !== ($file = $d->read())){ // Se o arquivo não é este arquivo, e não começa com "." ou "~" // e não termina em LCK, então guarde-o para exibição futura. if(($file{0} != '.') && ($file{0} != '~') && (substr($file, -3) != 'LCK') && (substr($file, -3) != 'php') && (substr($file, -3) != 'jpg') && (substr($file, -3) != 'png') && (substr($file, -3) != 'gif') && ($file != basename($_SERVER['PHP_SELF'])) ) { // Guarda o nome do arquivo e dados completos de uma chamada // à stat() $files[$file] = stat($file); } } // Fecha o diretório $d->close(); // Agora vamos exibir o resultado em uma tabela echo '<style>td { padding-right: 10px; }</style>'; echo '<table><caption>Conteúdo deste diretório:</caption>'; // Ordenar os arquivos em ordem alfabética ksort($files); // Definir o horário brasileiro: date_default_timezone_set('Brazil/East'); // Percorremos os arquivos, exibindo uma nova linha na tabela // para cada um deles. foreach ($files as $name => $stats) { // Inicia a linha e exibe um link com o nome do arquivo echo "<tr><td><a href=\"{$name}\">{$name}</a></td>\n"; // Uma célula com o tamanho do arquivo echo "<td align='right'>{$stats['size']}</td>\n"; // Uma coluna com a data de criação do arquivo echo '<td>', date('d/m/Y h:ia', $stats['mtime']), "</td></tr>\n"; } echo '</table>'; ?> Se testar este aí, vai ver que ele exibe certinho os arquivos como links, mas mostrando a extensão e aí quando você clica, abre sem problema o arquivo txt. Minha idéia é não aparecer a extensão, mas ao clicar, conseguir abrir este arquivo numa nova janela, exibindo ele, da linha 10 em diante. É onde veio a minha idéia de na parte do script que chama o link, colocar alguma coisa, que chame uma página php, que vai ler o arquivo texto do link e exibir ele da linha 10 em diante. Ai, não sei se estou sendo clara, até eu já to doidinha :blush: Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme Oderdenge 42 Denunciar post Postado Maio 18, 2011 Olá, GiSP. Aos poucos eu vou entender, hahaha. Desculpe, de início eu também não entendi. Então assim, para você exibir o link sem a extensão final do arquivo, você deve utilizar o ReWrite no .htaccess. Creio que também seja possível com o PHP, mas não me vem à cabeça como. Peguei este e este link para guiar você. Se continuar tendo dúvidas, fale! Abraços! ;) Compartilhar este post Link para o post Compartilhar em outros sites
GiSP 0 Denunciar post Postado Maio 18, 2011 Oi pessoal, obrigada pela ajuda, eu vou tentar fazer isso aí do htaccess pra ver se funciona e volto aqui pra dizer, bjinhos por enquanto :cheekkiss: Oi pessoal, voltei! :D Com a ajuda do amiguinho web de outro fórum, ele me passou uma solução bem mais simples do que a minha pra listar os arquivos txt sem mostrar a extensão: <?php// diretório onde estão os arquivos $dir = "."; // *.txt são os formatos de arquivos a serem alterados foreach (glob("$dir/*.txt") as $arquivo) { $p1 = explode("/", $arquivo); $p2 = explode(".", $p1[1]); print "<a href=\"$arquivo\" target=\"_blank\">$p2[0]</a><br>"; } ?> Esse código funcinou certinho, não exibe a extensão do arquivo no link e ao ser clicado o link abre certinho na outra janela. Acho que essa parte ficou bem legal. Ele deu esta idéia abaixo pra ler o txt a partir da linha tal e exibir ele na tela: $file = "arquivo...";$linha = explode("\n",file_get_contents($file)); for($i = 0; $i < count($linha); $i++) { $i < 5 ? "" : print($linha[$i])."<br />"; } 5 é o número de linhas que será ignorada a partir do início do arquivo. Mas agora, entra aquele outro negócio de o link que aparece, ao ser clicado já ser exibido na nova página php a partir da linha tal. Tipo assim: Link que aparece na listagem -> meuexemplo (referente ao meuexemplo.txt) Quando clicar nele, ele abrir na outra janela já na página php lendo das linhas em diante. Acho que é isso a idéia mas não sei se dá pra fazer isso, pois seria automatico, clicou no link, abriu a página já lendo o arquivo que o link se refere da linha tal em diante. Aí não sei se dá pra fazer um onclick aqui: print "<a href=\"$arquivo\" target=\"_blank\">$p2[0]</a><br>"; Com algum comando que faça este link, gerar uma nova página já lendo o arquivo que ele apontou. Será que dá? Compartilhar este post Link para o post Compartilhar em outros sites