Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabyo

Módulo 04

Recommended Posts

Curso de PHP online

 

Modulo 4

 

Introdução

 

o require

o include

o require_once

o include_once

o Autenticação HTTP com PHP

o Arrays

o Header

 

 

require()

 

A instrução require() inclui a avalia um arquivo específico.

 

require() e include() são idênticos em todas as formas exceto pela manipulação de erros. include() produz um Warning enquanto require() produzirá um Fatal Error. Em outras palavras, não hesite em utilizar require() se na falta de um arquivo quiser parar o processamento da página. include() não se comporta da mesma maneira, e o script poderá continuar nessa situação. Em todo caso, vale a pena confirmar a configuração da diretiva include_path.

 

PHP
  1. <?php

  2. require 'prepend.php';

  3. require $somefile;

  4. require ('somefile.txt');

  5. ?>

 

include()

 

A instrução include() inclui e avalia o arquivo informado.

 

A documentação a seguir se aplica também a require(). Esses dois construtores são idênticos a exceção de como eles manipulam erros. include() produz um Warning enquanto require() produzirá um Fatal Error. Em outras palavras, utilize require() se você deseja que um arquivo faltando interrompa o processamento da página. include() não se comporta da mesma maneira, permitindo que o script continue nessas situações. Em todo caso, vale a pena confirmar a configuração da diretiva include_path. Esteja avisado que um erro de interpretação no arquivo incluído não causa o cancelamento do processamento.

 

Arquivos a incluir são procurados primeiramente no include_path relativo ao diretório atual de trabalho e depois no include_path relativo ao diretório atual do script. Por exemplo, se seu incluide_path é ., o diretório atual é /www/, se você incluiu include/a.php e há um b.php nesse arquivo, b.php será procurado primeiro em /www/ e somente depois em /www/include/.

 

Quando um arquivo é incluído, seu código entra no escopo de variável da linha onde a inclusão ocorre. Qualquer variável disponível da linha onde a chamada da inclusão ocorre estará disponível para o arquivo incluído, daquele ponto em diante.

 

vars.php

 

$cor = 'verde';

$fruta = 'maçã';

 

frutas.php

<?php

 

echo "Uma $fruta $cor"; // ira mostrar "Uma" e um notice que nao existe as variaveis $fruta e $cor

 

include 'vars.php';//inclue a pagina

 

echo "Uma $fruta $cor"; // ira mostrar "Uma maçã verde"

 

?>

 

require_once()

 

A instrução require_once() incluí e avalia o arquivo especificado durante a execução do script. Seu comportamento é similar ao da instrução require(), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente. Veja a documentação de require() para maiores informações sobre como essa instrução funciona.

 

require_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo incluído mais de uma vez durante a execução de um script em particular, quando na verdade ele só pode ser incluído apenas uma, para evitar problemas com redefinições de funções, alterações nos valores de variáveis, etc.

 

 

 

PHP
  1. <?php<br />require_once("a.php"); // isto irá incluir a.phprequire_once("A.php"); // isto irá incluir a.php de novo no Windows!?>

 

include_once()

 

A instrução include_once() inclui e avalia o arquivo especificado durante a execução de um script. Seu comportamento é similar a instrução include(), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente. Como o nome sugere, ele será incluído apenas uma vez.

 

include_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo incluído mais de uma vez durante a execução de um script em particular, quando na verdade ele só pode ser incluído apenas uma para evitar problemas com redefinições de funções, alterações nos valores de variáveis, etc.

 

Para maiores informações utilizando require_once() e include_once(), veja o código do PEAR incluído nas últimas distribuições do código fonte do PHP.

 

 

PHP
  1. <?php<br />include_once("a.php");<br /> // isto irá incluir a.phpinclude_once("A.php"); // isto irá incluir a.php de novo no Windows!?>

 

Autenticação HTTP com PHP

 

Autenticação via HTTP no PHP só é disponível quando o mesmo for executador como módulo do Apache e, portanto, não é disponível na versão CGI. Em um script PHP no módulo Apache, é possível usar a função header() para enviar uma janela de entrada "Authentication Required". Uma vez que o usuário preencheu seu nome de usuário e senha, a URL contendo o script PHP será chamada de novo com as variáveis predefinidas PHP_AUTH_USER, PHP_AUTH_PW, e AUTH_TYPE contendo o nome de usuário, senha e tipo de autenticação, respectivamente. Essas variáveis predefinidas são achadas nos arrays $_SERVER e $HTTP_SERVER_VARS. Somente autenticação "Basic" (Básica) é suportada.

 

um exemplo simples :

<?

 

session_start();

 

  function Autenticar()

  {

  header('WWW-Authenticate: Basic realm = "Area Restrita"');

  header('HTTP/1.0 401 Unauthorized');

  echo "<center><h1>Acesso Restrito</h1></center>";

  exit;

  }

 

  function Confere_Login($nome, $senha)

  {

  mysql_connect("localhost", "usuario", "senha");

  mysql_select_db("online");

    $re = mysql_query("select count(*) as total from usuarios where nome = '$nome' and senha = md5('$senha')");

  mysql_close();

  return mysql_result($re, 0, "total");

}

 

if ( !isset($_SERVER["PHP_AUTH_USER"]) and !isset($_SERVER["PHP_AUTH_PW"]) )

{   

  Autenticar();     

}

 

else

{

  $total = Confere_Login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]);

   

  if ( $total == 0 )

  {

  Autenticar();

  }

}

 

?>

 

Arrays

 

Um array no PHP é atualmente um mapa ordenado. Um mapa é um tipo que relaciona valores para chaves. Este tipo é otimizado de várias maneiras, então você pode usá-lo como um array real, ou uma lista (vetor), hashtable (que é uma implementação de mapa), dicionário, coleção, pilha, fila e provavelmente mais. Como você pode ter outro array PHP como um valor, você pode facilmente simular árvores.

 

A explicação dessas estruturas estão além do escopo desse manual, mas você pode encontrar exemplos para cada uma dessas estruturas a seguir. Para mais informações sobre estruturas, refira-se a literatura externa sobre esses tópicos.

Sintaxe

Especificando com array()

 

Um array pode ser criado com o construtor de linguagem array(). Ele pega um certo número de pares separados por vírgula chave => valor .

 

array( [chave =>] valor

     , ...

     )

// chave pode ser tanto string ou um integer

// valor pode ser qualquer coisa

 

PHP
  1. <?php
  2. $arr = array("foo" => "bar", 12 => true);
  3. echo $arr["foo"];
  4. echo $arr[12];
  5. ?>

 

A chave pode ser tanto um integer ou uma string. Se a chave é uma representação padrão de um integer, ele será interpretado assim (por exemplo, "8" será interpretado como 8, enquanto "08" será interpretado como "08"). Não há diferença entre arrais indexados e associativos em PHP, apenas um tipo de array, que pode ter índices inteiros ou string.

 

O valor pode ser qualquer tipo PHP:

 

PHP
  1. <?php
  2. $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));

  3. echo $arr["somearray"][6];
  4. echo $arr["somearray"][13];
  5. echo $arr["somearray"]["a"];
  6. ?>

 

Se omitir a chave quando fornece um novo item, o maior índice inteiro é obtido, e a nova chave será esse máximo + 1. Se você especificar uma chave que já possui um valor assimilada a ela, então o valor é sobrescrito.

 

PHP
  1. <?php
  2. array(5 => 43, 32, 56, "b" => 12);

  3. array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
  4. ?>

 

 

Indice de algumas funções do array:

 

array_change_key_case -- Retorna um array com todas as chaves string em maiúsculo ou minúsculo

array_chunk -- Divide um array em pedaços

array_count_values -- Conta as frequências de cada valor de um array

array_diff -- Analisa as diferenças entre arrays

array_fill -- Preenche um array com valores

array_filter -- Filtra os elementos de um array utilizando uma função

array_flip -- Inverte as relações entre chaves e valores

array_intersect -- Calcula a interseção entre arrays

array_key_exists -- Checa se uma chave ou índice existe em um array

array_keys -- Retorna todas as chaves de um array

array_map -- Aplica uma função em todos os elementos dos arrays dados

array_merge_recursive -- Funde dois ou mais arrays recursivamente

array_merge -- Funde dois ou mais arrays

array_multisort -- Ordena múltiplos arrays ou arrays multi-dimensionais

array_pad -- Expande um array para um certo comprimento utilizando um determinado valor

array_pop -- Retira um elemento do final do array

array_push -- Adiciona um ou mais elementos no final de um array

array_rand -- Retorna um ou mais elementos aleatórios de um array

array_reduce -- Reduz um array para um único valor através de um processo iterativo utilizando uma função.

array_reverse -- Retorna um array com os elementos na ordem inversa

array_search -- Procura por um valor em um array e retorna sua chave correspondente caso seja encontrado

array_shift -- Retira o primeiro elemento de um array

array_slice -- Extrai uma parcela de um array

array_splice -- Remove uma parcela do array e substitui com outros elementos

array_sum -- Calcula a soma dos elementos de um array

array_unique -- Remove o valores duplicados de um array

array_unshift -- Adiciona um ou mais elementos no início de um array

array_values -- Retorna todos os valores de um array

array_walk -- Aplica uma determinada funcão em cada elemento de um array

array -- Cria um array

arsort -- Ordena um array em ordem descrescente mantendo a associação entre índices e valores

asort -- Ordena um array mantendo a associação entre índices e valores

compact -- Cria um array contendo variáveis e seus valores

count -- Conta o número de elementos de uma variável

current -- Retorna o elemento corrente em um array

each -- Retorna o par chave/valor corrente de um array e avança o seu cursor

end -- Faz o ponteiro interno de um array apontar para o seu último elemento

extract -- Importa variáveis para a tabela de símbolos a partir de um array

in_array -- Checa se um valor existe em um array

key -- Retorna uma chave de um array associativo

krsort -- Ordena um array pelas chaves em ordem descrescente

ksort -- Ordena um array pelas chaves

list -- Cria variáveis como se fossem arrays

natcasesort -- Ordena um array utilizando o algoritmo da "ordem natural" sem diferenciar maiúsculas e minúsculas

natsort -- Ordena um array utilizando o algoritmo da "ordem natural"

next -- Avança o ponteiro interno de um array

pos -- Retorna o elemento atual do array

prev -- Retrocede o ponteiro interno de um array

range -- Cria um array contendo uma faixa de elementos

reset -- Faz o ponteiro interno de um array apontar para o seu primeiro elemento

rsort -- Ordena um array em ordem descrescente

shuffle -- Mistura os elementos de um array

sizeof -- Apelido de count()

sort -- Ordena um array

uasort -- Ordena um array utilizando uma função de comparação definida pelo usuário e mantendo as associações entre chaves e valores

uksort -- Ordena um array pelas chaves utilizando uma função de comparação definida pelo usuário.

usort -- Ordena um array pelos valores utilizando uma função de comparação definida pelo usuário

 

Header

header -- Envia um cabeçalho HTTP diretamente

 

header() é usado para enviar diretamete cabeçalhos HTTP headers.

 

O parâmetro opcional replace indica quando um cabeçalho deverá substituir um cabeçalho similar anterior, ou adicionar um segundo cabeçalho do mesmo tipo. Por padrão irá substituir, mas se você passar FALSE como segundo argumento você poderá forçar multiplos cabeçalhos do mesmo tipo. Por exemplo:

 

PHP
  1. <?php
  2. header('WWW-AuthenticateNegotiate');
  3. header('WWW-AuthenticateNTLM', false);
  4. ?>

 

O segundo caso especial é o cabeçalho "Location:". Não somente envia o seu cabeçalho para o browser, mas também retorna código de situação REDIRECT (302) para o browser a menos que algum código de situação 3xx já tenha sido definido.

 

PHP
  1. <?php
  2. header("Location//www.imasters.com.br"); ?>

 

Scripts PHP normalmente geram conteúdo dinamico que não deva ser guardado em cache pelo browser do cliente ou qualquer cache de proxy entre o servidor e o browser do cliente. Muitos proxies e clientes são forçados a desabilitar o cache usando:

 

PHP
  1. <?php
  2. header("ExpiresMon, 26 Jul 1997 05:00:00 GMT");
  3. header("Last-Modified" . gmdate("D, d M Y H:i:s") . " GMT");
  4. header("Cache-Controlno-store, no-cache, must-revalidate");
  5. header("Cache-Controlpost-check=0, pre-check=0", false);
  6. header("Pragmano-cache");
  7. ?>

 

Você pode pensar que suas páginas não são colocadas em cache mesmo que você não envie todos os cabeçalhos acima. Existem várias opções que os usuários podem definir em seus browser que mudam o funcionamento do cache. Enviando os cabeçalhos acima, você irá sobrescrever qualquer definição que faça seu script ser colocado em cache.

 

Adicionalmente as configurações, session_cache_limiter() e session.cache_limiter podem ser usadas para gerar automaticamente os cabeçalhos corretos quando estão sendo usadas sessões.

 

Lembre-se que header() deve ser utilizada antes que qualquer saida seja enviada, seja pelo HTML, linhas ou espaços em branco em um arquivo, ou a partit do PHP. É um erro muito comum ler código com a função include(), ou require(), ou outra função que acesse arquivos, e ter espaços ou linhas em branco antes da função header(). O mesmo problema existe quando usar um arquivo PHP/HTML.

 

PHP
  1. <html>
  2. <?php
  3. header('Location//www.example.com/');
  4. ?>

 

Nota: A partir do PHP 4, você pode usar o buffer de saída para contornar este problema, com a sobrecarga que toda a saída do browser será guardada em buffer no servidor até que voc^envie ele. Você poderá fazer isso usando ob_start() e ob_end_flush() no seu script ou definido a diretiva de configuração output_buffering no seu php.ini ou nos arquivos de configuração do servidor.

 

Se você queira que seja perguntado ao usuário para salvar os dados que você esta enviando, como um arquivo PDF gerado, você pode usar o cabeçalho Content-Disposition para recomendar um nome de arquivo e forçar o browser a mostrar uma caixa salvar arquivo.

 

PHP
  1. <?php
  2. // Nós estaremos enviando um PDF
  3. header('Content-typeapplication/pdf');
  4. // Será chamado downloaded.pdf
  5. header('Content-Dispositionattachment; filename="downloaded.pdf"');
  6. // A fonte do PDF é original.
  7. readfile('original.pdf');
  8. ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi no exemplo:<?phpecho "Uma $fruta $cor"; // Uma maçãinclude 'vars.php';echo "Uma $fruta $cor"; // Uma maçã verde?> as respostas não deveria ser:// Uma // Uma maçã verdeno lugar de:// Uma maçã // Uma maçã verde

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais uma dúvida:em array_diff$arr1 = array(5,32,56,); //defini um array$arr2 = array(3,32,56,); //defini outro array$arr3 = array_diff($arr1,$arr2) //diff arrayo que retornaria echo $arr3 ? (2)? (1)? (2,0,0)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tinha uns erros la que ja arrumei

 

$arr1 = array(5,32,56,); //defini um array

$arr2 = array(3,32,56,); //defini outro array

 

$arr3 = array_diff($arr1,$arr2);//Analisa as diferenças entre arrays

 

print_r($arr3);//Array ( [0] => 5 )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse exemplo que eu fiz é só pra você entender como funciona ele ta bem simples e eu nao gosto de abrir uma conexao com o banco e nao fechar ,mas depois você melhora ele e proteja todas as paginas fazendo uma pagina para ser incluida nas suas paginas eu montei uma classe de autenticacao muito segura mas usei o php 5

 

se precisar de mais alguma coisa posta ai

 

PHP

<?php

 

$nome = "";

$senha = "";

 

$cn = mysql_connect("localhost");

mysql_select_db("banco");

 

if (!isset($_SERVER["PHP_AUTH_USER"]) || !isset($_SERVER["PHP_AUTH_PW"])){

 

header('WWW-Authenticate: Basic realm = "Acesso Restrito"');

header('HTTP/1.0 401 Unauthorized');

echo '<center><h1>Acesso Restrito</h1></center>';

exit;

 

}

 

else{

 

$nome = $_SERVER["PHP_AUTH_USER"];

$senha = $_SERVER["PHP_AUTH_PW"];

 

$re = mysql_query("SELECT count(*) as total FROM usuarios WHERE nome = '$nome' and senha = md5('$senha')");

$total = mysql_result($re, 0, "total");

 

if ($total == 0) {

 

header('WWW-Authenticate: Basic realm = "Acesso Restrito"');

header('HTTP/1.0 401 Unauthorized');

echo '<center><h1>Acesso Restrito</h1></center>';

exit;

}

 

else{

 

header("Location: principal.php");

 

}

}

 

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

funciono legalmas uma dúvidacomo bloquear as outras páginas, e redircionar para a página do login, caso não esteje logado?com autenticação HTTP não faço a mínima idéiavaleu

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode usar session e depois que o cara passou pelo login e você redireciona

para pagina principal você cria uma sessao e só testar em cada pagina se a sessao

existe e se existe você verifica de novo o nome e senha do banco se tiver errado ou

nao tiver a sessao você redirecionda pra pagina de login

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode usar session e depois que o cara passou pelo login e você redireciona

para pagina principal você cria uma sessao e só testar em cada pagina se a sessao

existe e se existe você verifica de novo o nome e senha do banco se tiver errado ou

nao tiver a sessao você redirecionda pra pagina de login

<{POST_SNAPBACK}>

eu fiz da seguinte maneira:

 

acrescentei isto ao seu código:

 

PHP

 

...

if ($total == 0) {

header('WWW-Authenticate: Basic realm="PlugNews - Gerenciador de Newsletter"');

header('HTTP/1.0 401 Unauthorized');

echo '<center><h1>Acesso Restrito</h1></center>';

exit;

} else {

// aqui alterai

session_start();

$GLOBALS['Leandro'] = $nome;

session_register("Leandro");

header("Location:inicio.php");

...

 

então nas páginas eu verifico se existe a sessão se não, redireciona para a página que está o código acima, eu chamei de a página a cima de "index.php"

 

verifica se existe a sessão:

 

 

PHP

 

<?php

session_start();

if (!(isset($_SESSION["Leandro"]))) {

header ("Location: index.php");

exit();

}

?>

 

ta funcionando, mas o problema está no logout. Estou fazendo assim, para fazer o logout:

 

PHP

 

<?php

session_start();

session_unregister('Leandro');

echo "<script type=\"text/javascript\">";

echo "alert(\"A sessão foi encerrada com êxito.\");";

echo "window.location.href=\"index.php\"";

echo "</script>";

?>

 

Ou seja mostra a mensagem "A sessão foi encerrada com êxito".

 

mas ao invés de aparecer novamente a tela de login (pois matou a sessão) e ele está redirecionando para a página "inicio.php", ou seja a página que vai quando você faz o login.

 

o que estou fazendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao use session_register só use $_SESSION

 

essas variaveis estao obsoletas e fora de uso ,por segurança o register_globals

esta desativado por padrao entao nao ira funcionar essas variaveis use a $_SESSION

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao use session_register só use $_SESSION

 

essas variaveis estao obsoletas e fora de uso ,por segurança o register_globals

esta desativado por padrao entao nao ira funcionar essas variaveis use a $_SESSION

<{POST_SNAPBACK}>

alterei ficando assim:

 

PHP

 

...

} else {

 

session_start();

 

$_SESSION["Leandro"] = $nome;

 

header("Location: inicio.php");

...

 

mas ao o que tenho de alterar no logou abaixo:

 

PHP

 

<?php

session_start();

session_unregister('Leandro');

echo "<script type=\"text/javascript\">";

echo "alert(\"A sessão foi encerrada com êxito.\");";

echo "window.location.href=\"index.php\"";

echo "</script>";

?>

 

 

pois quando clico no link, para chamar a página logou.php que tem o código acima, a msg aparece, mas mas volta para a página inicio.php e terei que ser index.php

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lendro tenta assim:

 

logout.php

PHP

[*]<?

[*]//INICIALIZA A SESSÃO

[*]session_start();

[*]

[*]//DESTRÓI AS VARIÁVEIS

[*]unset($_SESSION["id"]);

[*]unset($_SESSION["nome"]);

[*]

[*]//REDIRECIONA PARA A TELA DE LOGIN

[*]Header("Location: index.php");

[*]?>

 

agora pra verifica se o cara é registrado... poe isso no inicio de cada pagina protegida:

 

verifica.php

PHP

[*]<?

[*]//INICIALIZA A SESSÃO

[*]session_start();

[*]

[*]//SE NÃO TIVER VARIÁVEIS REGISTRADAS

[*]//RETORNA PARA A TELA DE LOGIN

[*]if( (!isset($_SESSION["id"])) AND (!isset($_SESSION["nome"])) )

[*] Header("Location: index.php");

[*]?>

[*]

 

Bem é isso, espero que essa seja sua duvida! aqui esta funcionando legal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom vou esplicar direitinho para ser entendido melhor.

 

Bom, para o arquivo index.php é onde se faz o login com Autenticação HTTP e o script é esse:

 

PHP

[*]

[*]<?php require_once('Connections/Conn.php'); ?>

[*]<?php

[*]$nome = "";

[*]$senha = "";

[*]if (!isset($_SERVER["PHP_AUTH_USER"]) || !isset($_SERVER["PHP_AUTH_PW"])){

[*]header('WWW-Authenticate: Basic realm="Restrito"');

[*]header('HTTP/1.0 401 Unauthorized');

[*]echo '<center><h1>Acesso Restrito</h1></center>';

[*]exit;

[*]} else {

[*]$nome = $_SERVER["PHP_AUTH_USER"];

[*]$senha = $_SERVER["PHP_AUTH_PW"];

[*]mysql_select_db($database_Conn, $Conn);

[*]$consulta = mysql_query("SELECT count(*) as total FROM config WHERE config_login = '$nome' AND config_senha = md5('$senha')");

[*]$total = mysql_result($consulta,0,"total");

[*]if ($total == 0) {

[*]header('WWW-Authenticate: Basic realm="Restrito"');

[*]header('HTTP/1.0 401 Unauthorized');

[*]echo '<center><h1>Acesso Restrito</h1></center>';

[*]exit;

[*]} else {

[*]session_start();

[*]$_SESSION["Leandro"] = $nome;

[*]header("Location: inicio.php");

[*]}

[*]}

[*]?>

[*]

 

Ou seja este script está criando uma sessão e enviado após a sessão ser criada para a página inicio.php

 

até aqui beleza.

 

Então para verificar se estar logado ou não estou fazendo assim;

 

PHP

[*]

[*]<?php

[*]session_start();

[*]if (!(isset($_SESSION["Leandro"]))) {

[*]header ("Location: index.php");

[*]exit();

[*]}

[*]?>

[*]

 

Ou seja, se não estiver logado, volta para a págian index.php onde se faz o login.

 

Bom, assim funfa beleza, verifica legal, mas no logout....

 

para fazer o logou estou fazendo assim, como passou o nuboza:

 

PHP

[*]

[*]<?

[*] //INICIALIZA A SESSÃO

[*] session_start();

[*] //DESTRÓI AS VARIÁVEIS

[*] unset($_SESSION["Leandro"]);

[*] //REDIRECIONA PARA A TELA DE LOGIN

[*] Header("Location: index.php");

[*] ?>

[*]

 

Ou seja, está destruindo a sessão chamada Leandro, que foi criada na página index.php. e redirecionando para a ela.

 

Então, isto não ocorre, ao invés de ir para a página index.php, está indo para a página inicio.php, como se a sessão estivesse sendo criada de novo.

 

???

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.