• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

_JR_

Postar link dum ficheiro numa página html

23 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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  :P Alguma sugestão para que eles apareçam apenas se a linha estiver a ser usada?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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]";>

}

Porquê que ele tem que utilizar  $relatorios = explode("<->", $buffer); ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :|

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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>

:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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  :P Dá para explicares um bocado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<?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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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>";

  
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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>";

  
}

O problema ja foi resolvido  :) Mas sempre ajuda... :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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>";

  
}

O problema ja foi resolvido  :) Mas sempre ajuda... :P

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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mudei os vossos post's porque no meu "citar" tinha lá duas variáveis de um teste antigo que já não eram precisas e eu esqueci-me de as retirar, não modifiquei mais nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o codigo do Gurzi é o + simples para este problema, que também é uma coisa simples e não ha necessidade de complicar como no caso do kingless com o preg_match (no hard feelings).

aquilo que não percebeste que eu não tinha dito é o seguinte. tu no teu codigo estavas a ler o ficheiro todo antes do <html> e depois a imprimir no sitio desejado os links, mas isos tava a dar-te problemas. o que eu disse pa fazeres foi, pegares no codigo onde les linha a linha e colocas no sitio onde queres os links ou então a segunda possibilidade, era teres a leitura do ficheiro e gravação de resultados no array no topo e onde escreves os links apenas um ciclo for para os imprimires, mas se achasses esta opção + complicada para fazeres a primeira, que será basicamente pegares no bloco de codigo (do Gurzi por exemplo) e colcoares onde queres os links...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora já entendi o que querias dizer :)

Implantei o codigo do Gurzi e funciona muito bem :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora