Jump to content

Postar link dum ficheiro numa página html


Recommended Posts

Posted

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?

Posted

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

Posted

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?

Posted

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

Posted

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.

Posted

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?

Posted

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

Posted

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

Posted

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

Posted

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.

Posted

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)

Posted

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>

😛

Posted

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.

Posted

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?

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

Posted

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

  
}
Posted

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 🙂

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.