_JR_ Posted August 1, 2006 at 10:32 PM Report #41598 Posted August 1, 2006 at 10:32 PM Ora bem eu tenho um ficheiro "relatorios.txt" onde queria que fosse postado um link e a sua descrição para depois ser postado numa página. Página essa que seria algo deste género: Inicio: $filename = 'relatorios.txt'; $handle = fopen ($filename, "r"); $conteudo = fread($handle, filesize ($filename)); fclose ($handle); <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> <title>teste</title> </head> <body> $conteudo </body> </html> No entanto não estou a ver como posso fazer isso. Alguma sugestão?
Guest id194 Posted August 2, 2006 at 12:25 AM Report #41617 Posted August 2, 2006 at 12:25 AM só vai ter um link e uma descrição? se sim, podes gravar cada informação separada por linha e dps lês linha a linha e gravas em variaveis diferentes. se for varios links com descrições, podes fazer o mesmo e processas logo duas linhas de cada vez, ou então guardas o link e a descrição na mesma linha, separado por algum caracter que a descrição possivelmente n tera, ou então um conjunto de caracters que seja mesmo pouco provavel k a descrição contenha, e depois lês linha a linha e separas o link da descrição com o explode()
_JR_ Posted August 2, 2006 at 06:18 AM Author Report #41638 Posted August 2, 2006 at 06:18 AM São vários links que vão sendo adicionados à medida que os utilizadores enviam um texto. Vai sendo criada linha a linha. Então se eu tiver no ficheiro algo assim: http://www.portugal-a-programar.org Portugal a Programar Se eu quiser usar esta frase então faço algo do género: $filename = 'relatorios.txt'; $handle = fopen ($filename, "r"); $link = fread($handle, 33); // Obrigado Gurzi $conteudo = fread($handle, 70); // E esta linha está correcta? fclose ($handle); <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> <title>teste</title> </head> <body> <a href= $link > $conteudo </a> </body> </html> Não entendi bem foi o explode() . E quando eu quiser adicionar uma linha no "relatorios.txt" (por cima de preferência)? Não há problemas?
kingless Posted August 2, 2006 at 09:49 AM Report #41656 Posted August 2, 2006 at 09:49 AM $filename = 'relatorios.txt'; $handle = fopen ($filename, "r"); $link = fread($handle, 33); // Obrigado Gurzi $conteudo = fread($handle, 70); // E esta linha está correcta? fclose ($handle); <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> <title>teste</title> </head> <body> <a href= $link > $conteudo </a> </body> </html> Não entendi uma coisa... porquê que utilizas fread duas vezes, quando só precisas de utilizar uma vez ?
Guest id194 Posted August 2, 2006 at 10:52 AM Report #41664 Posted August 2, 2006 at 10:52 AM grava antes o ficheiro assim: http://www.link1.com<->Descrição do link 1 http://www.link2.com<->Descrição do link 2 Depois faz antes algo do tipo: $handle = @fopen("/tmp/inputfile.txt", "r"); if ($handle) { $buffer = fgets($handle, 4096); $relatorios = explode("<->", $buffer); fclose($handle); } Depois a variavel $relatorios[0] vai ter o link e a $relatorios[1] a descrição. Vê se começas mais a ler o manual de php, encontravas esta informação num instante só a procurar o nome das funções.
_JR_ Posted August 2, 2006 at 01:33 PM Author Report #41707 Posted August 2, 2006 at 01:33 PM Obrigado Nazgulled e desculpa lá não ter logo ido ler o manual de php 🙂 kingless como sou bastante iniciado nisto espero que compreendas alguns erros 🙂 Agora a única solução que me ocorre para ir tendo as linhas à medida que os utilizadores forem postando é criar logo no ficheiro vários links com várias contantes ($relatorio[2],$relatorio[3]...) e gravar no file .txt sempre com "<->" as quebras de linha. Desta maneira funcionará não? EDIT: Ora bem, funcionar funciona mas o problema é que as quebras de linha (<br>) ficam lá sempre como é obvio se pensar um bocado 😛 Alguma sugestão para que eles apareçam apenas se a linha estiver a ser usada?
Gurzi Posted August 2, 2006 at 02:24 PM Report #41720 Posted August 2, 2006 at 02:24 PM Não estou bem a entender o teu problema , mas ... Se quiseres mostrar todos os links fazes algo do género : while(feof($handle)) { $buffer = fgets($handle, 4096); $relatorios = explode("<->", $buffer); <a href=" echo 'relatorios[0]'">echo "relatorios[1]";> echo "<br>"; } tens que por os caracteres inicializadores , como sabes por ordem de segurança o fórum não deixa colocar, qualquer duvida pm
kingless Posted August 2, 2006 at 02:27 PM Report #41723 Posted August 2, 2006 at 02:27 PM Porquê que ele tem que utilizar $relatorios = explode("<->", $buffer); ?
Gurzi Posted August 2, 2006 at 02:31 PM Report #41727 Posted August 2, 2006 at 02:31 PM Ora, porque ele no relatorios.txt as coisas estão assim : www.kingless.org<->kingless ou seja o que separa o link do name link é o <-> e usando o explode("<->", $relatorios); vai ficar $relatorios[0] = www.kingless.org e vai ficar $relatorios[1] = kingless got it ??
_JR_ Posted August 2, 2006 at 02:39 PM Author Report #41733 Posted August 2, 2006 at 02:39 PM Não estou bem a entender o teu problema , mas ... Se quiseres mostrar todos os links fazes algo do género : while(feof($handle)) { $buffer = fgets($handle, 4096); $relatorios = explode("<->", $buffer); <a href=" echo 'relatorios[0]'">echo "relatorios[1]";> echo "<br>"; } tens que por os caracteres inicializadores , como sabes por ordem de segurança o fórum não deixa colocar, qualquer duvida pm A página fica em branco :|
Gurzi Posted August 2, 2006 at 02:48 PM Report #41741 Posted August 2, 2006 at 02:48 PM desculpa enganeime no código $filename = "relatorios.txt"; $handle = fopen($filename, "r+"); while(!feof($handle)) { $buffer = fgets($handle, 4096); $relatorios = explode("<->", $buffer); echo $relatorios[0] . "<br>"; echo $relatorios[1]; } como deves perceber isso faz a leitura e o output, agora vou fazer o do link, ja faço update.
kingless Posted August 2, 2006 at 02:50 PM Report #41742 Posted August 2, 2006 at 02:50 PM @_JR_ o que é que tem no ficheiro relatorios.txt ?
_JR_ Posted August 2, 2006 at 03:04 PM Author Report #41745 Posted August 2, 2006 at 03:04 PM desculpa enganeime no código $filename = "relatorios.txt"; $handle = fopen($filename, "r+"); while(!feof($handle)) { $buffer = fgets($handle, 4096); $relatorios = explode("<->", $buffer); echo $relatorios[0] . "<br>"; echo $relatorios[1]; } como deves perceber isso faz a leitura e o output, agora vou fazer o do link, ja faço update. $filename = "relatorios.txt"; $handle = fopen($filename, "r+"); while(!feof($handle)) { $buffer = fgets($handle, 4096); $relatorios = explode("<->", $buffer); <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> <title>teste</title> </head> <body> <a href= echo $relatorios[0] > echo $relatorios[1]; </a> php echo "<br>" } </body> </html> Assim só aparece 1 :bored: Se fizer assim: $filename = "relatorios.txt"; $handle = fopen($filename, "r+"); while(!feof($handle)) { $buffer = fgets($handle, 4096); $relatorios = explode("<->", $buffer); <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> <title>teste</title> </head> <body> <a href= echo $relatorios[6] > echo $relatorios[7]; </a> php echo "<br>" <a href= echo $relatorios[4] > echo $relatorios[5]; </a> php echo "<br>" <a href= echo $relatorios[2] > echo $relatorios[3]; </a> php echo "<br>" <a href= echo $relatorios[0] > echo $relatorios[1]; </a> php echo "<br>" } </body> </html> Já aparecem os links todos e aparece em branco quando não há mas aparece a quebra de pagina. Por exemplo: " Portugal a Programar P@P " Kingless tem por exemplo: http://www.portugal-a-programar.org/<->Portugal a Programar<->http://www.portugal-a-programar.org/<->P@P (usando o exemplo de cima)
kingless Posted August 2, 2006 at 03:34 PM Report #41755 Posted August 2, 2006 at 03:34 PM Criei este código agora, já testei e funcionou bem... <?php $ficheiro = "relatorios.txt"; $a = file($ficheiro); $b = explode('<->', $a[0]); foreach($b as $c){ if(preg_match( '/(http|ftp|https):\/\//i', $c ) ) { $href[] = $c; } if(!preg_match( '/(http|ftp|https):\/\//i', $c ) ) { $valor[] = $c; } } $x = count( $href ); for($i = 0; $i < $x; $i++ ) { $link = '<a href="'. $href[$i] .'">'. $valor[$i] .'</a><br />'; echo $link; } ?> Isso mostra: <a href="http://www.portugal-a-programar.org/">Portugal a Programar</a> <a href="http://www.portugal-a-programar.org/">P@P</a> 😛
Guest id194 Posted August 2, 2006 at 04:36 PM Report #41763 Posted August 2, 2006 at 04:36 PM não ha necessidade nenhuma disso... vocês gostam de complicar o que é extremamente simples... claro que para o caso do _JR_ que parece ter pouco experiencia nisto, coloca as duvidas de forma que complica ainda mais. eu podia colocar aqui o codigo simples e maneira + facil de fazer isso, e as funções que tens de usar tão todas acima, mas asism não aprendes nada, por isso vou explicar-te o que tens a fazer... Tu queres ter links e descrições num ficheiro de texto. A melhor maneira de o fazer, é ter as coisas divididas por linhas e assim lês linha a linha. Como disse anteriormente, tens duas possibilidades a guardar no ficheiro de texto: 1) link descrição link descrição and so on... 2) link<->descrição link<->descrição link<->descrição and so on... o <-> é o delimitador, para puderes dividir uma string quando esse delimitador for encontrado, podias usar algo + simples como ; ou |, mas caso tivesses esses caracteres na descrição (no link é pouco provavel), já não ias conseguir dividir direito, terias de usar funções + complicadas, mas para já isso não é necessario. portanto, usa-se um delimitador do tipo <-> que não me parece que va aparecer numa descrição. Seguidamente, abres o ficheiro, e lês o ficheiro linha a linha (lê o manual na função fgets() e tens lá como fazer isto), depois de leres uma linha, usas o explode() para dividir o link da descrição. Agora a parte que ainda não tinha dito: Ou fazes isto no meio da pagina e depois vais imprimindo os links um a um dentro do ciclo que estas a ler o linha a linha. Ou então gravas num array multidimensional e depois crias um ciclo onde queres os links e processas array imprimindo os seus valores. Se achares a segunda opção muito complicada, opta pela primeira.
_JR_ Posted August 2, 2006 at 04:43 PM Author Report #41766 Posted August 2, 2006 at 04:43 PM Criei este código agora, já testei e funcionou bem... <?php $ficheiro = "relatorios.txt"; $a = file($ficheiro); $b = explode('<->', $a[0]); foreach($b as $c){ if(preg_match( '/(http|ftp|https):\/\//i', $c ) ) { $href[] = $c; } if(!preg_match( '/(http|ftp|https):\/\//i', $c ) ) { $valor[] = $c; } } $x = count( $href ); for($i = 0; $i < $x; $i++ ) { $link = '<a href="'. $href[$i] .'">'. $valor[$i] .'</a><br />'; echo $link; } ?> Isso mostra: <a href="http://www.portugal-a-programar.org/">Portugal a Programar</a> <a href="http://www.portugal-a-programar.org/">P@P</a> 🙂 Obrigadão. Já agora, dava pra incluires umas explicações no código? Para eu perceber mais ou menos o que é feito aí 🙂 Nazgulled sim, eu compliquei um bocado e tenho pouco experiência 🙂 Agora não entendi nada foi da parte que não tinhas dito 😛 Dá para explicares um bocado?
kingless Posted August 2, 2006 at 05:06 PM Report #41772 Posted August 2, 2006 at 05:06 PM <?php //ficheiro onde estão osm links etc.... $ficheiro = "relatorios.txt"; //Isto abre o ficheiro e mostra o seu conteudo http://pt.php.net/file $a = file($ficheiro); //Isto vai tirar <-> e vai transformar a variavel $b em um array $b = explode('<->', $a[0]); //Esta função separa o array (para cada valor de $b como $c ) foreach($b as $c){ //Se for encontrado http://.. (o link) if(preg_match( '/(http|ftp|https):\/\//i', $c ) ) { //Então adiciona o link a um array $href $href[] = $c; } //se não for encontrado http (que vão ser os valores) if(!preg_match( '/(http|ftp|https):\/\//i', $c ) ) { //Então adiciona a um array os valores $valor[] = $c; } } //count( $href ) serve para contar quantos valores tem $href $x = count( $href ); //$i é igual 0 e $i é menor que a varivel $x então incrementa $i for($i = 0; $i < $x; $i++ ) { //Aqui cria o link $link = '<a href="'. $href[$i] .'">'. $valor[$i] .'</a><br />'; echo $link; } ?> É dificil explicar mas tentei
Gurzi Posted August 2, 2006 at 06:47 PM Report #41785 Posted August 2, 2006 at 06:47 PM Bem.. como prometido, aqui está... $filename = "relatorios.txt"; $handle = fopen($filename, "r+"); $relatorios = array(); while(!feof($handle)){ $buffer = fgets($handle, 4096); $rel = explode("<->", $buffer); array_push($relatorios, $rel[0], $rel[1]); } $i = count($relatorios); for($i =0; $i < count($relatorios); ) { echo "<a href=".$relatorios[$i++].">".$relatorios[$i++]."</a><br>"; }
kingless Posted August 2, 2006 at 06:55 PM Report #41786 Posted August 2, 2006 at 06:55 PM O problema ja foi resolvido 🙂 Mas sempre ajuda... 😛
_JR_ Posted August 2, 2006 at 07:06 PM Author Report #41787 Posted August 2, 2006 at 07:06 PM Ajuda e bem 🙂 Este é mais facil de entender 🙂 kingless vou ver se guardo o teu codigo para mais tarde quando tiver mais experiência ver se o consigo perceber melhor. Obrigado a todos os que me ajudaram 🙂
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now