Ir para conteúdo

POWERED BY:

Arquivado

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

Micilini Roll

cookie nao funciona (erro de headers)

Recommended Posts

pessoa eu tenho este comando :

 

<?
if(isset($_COOKIE["navegador"]) and isset($_COOKIE["navegador_versao"]) and isset($_COOKIE["definicao"])){

$nav = $_COOKIE["navegador"];
    $navv = $_COOKIE["navegador_versao"]; 
$definicao = $_COOKIE["definicao"];
    
?>
    <img src="desing/<? echo $nav ?>.png" width="42" height="42" />
    <?
    if($definicao < 800){
?>
    <img src="desing/normal.png" width="42" height="42">
    <?
}if($definicao > 800){
?>
    <img src="desing/alta.png" width="42" height="42">
<?
}
?>
    <img src="desing/Brazil-icon.png" width="42" height="42">
    <?
}else{
  $useragent = $_SERVER['HTTP_USER_AGENT'];
  $ponto = '.';
  if (preg_match('|MSIE ([0-9].[0-9]{1,2})|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'explorer';
$versao = substr($browser_version, 0, strpos($browser_version, $ponto));
if($versao < 9){
echo "joga outra tela";
}

  } elseif (preg_match( '|Opera/([0-9].[0-9]{1,2})|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'Opera';
$versao = substr($browser_version, 0, strpos($browser_version, $ponto));
if($versao < 9){
echo "joga outra tela";
}
} elseif(preg_match('|Navigator/([0-9\.]+)|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'netscape';
$versao = substr($browser_version, 0, strpos($browser_version, $ponto));
if($versao < 9){
echo "joga outra tela";
}
  }
elseif(preg_match('|Maxthon/([0-9\.]+)|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'maxthon';
$versao = substr($browser_version, 0, strpos($browser_version, $ponto));
if($versao < 4){
echo "joga outra tela";
}
  } elseif(preg_match('|Firefox/([0-9\.]+)|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'firefox';
$versao = substr($browser_version, 0, strpos($browser_version, $ponto));
if($versao < 19){
echo "joga outra tela";
}
  
  } elseif(preg_match('|Chrome/([0-9\.]+)|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'chrome';
$versao = substr($browser_version, 0, strpos($browser_version, $ponto));
if($versao < 25){
echo "joga outra tela";
}
  } elseif(preg_match('|Safari/([0-9\.]+)|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'safari';
$versao = substr($browser_version, 0, strpos($browser_version, $ponto));
if($versao < 534){
echo "joga outra tela";
}
  }
   else {
    // browser not recognized!
    $browser_version = 0;
$versao = substr($browser_version, 0, strpos($browser_version, $ponto));
    $browser= 'other';
echo "joga outra tela";

  }       

  
  setcookie("navegador",$browser, time()+ (5*24*3600));
  setcookie("navegador_versao",$browser_version, time()+ (5*24*3600));
  
$kb=1024;
echo "<!-";
flush();
$time = explode(" ",microtime());
$start = $time[0] + $time[1];
for($x=0;$x<$kb;$x++){
    echo str_pad('', 1024, '.');
    flush();
}
echo "->";
$time = explode(" ",microtime());
$finish = $time[0] + $time[1];
$deltat = $finish - $start;
$velocidade = round($kb / $deltat, 3);
$vel = substr($velocidade, 0, strpos($velocidade, $ponto));
setcookie("definicao",$vel, time()+ (5*24*3600));
}
?>

 

 

 

este comando é puro,ou seja nao tem nada de tags html nele ai,o projeto so tem estes comandos,

pq seguinte no comando ele verifica se existe cookie , caso nao existir ele verifica qual o navegador do usuario a versao e velocidade de conexao e guarda nos cookies,mas da este erro:

 

Warning: Cannot modify header information - headers already sent by (output started at....)on line 107

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está dando vários echos, remova todas eles, não pode haver saída alguma para o navegador antes do setcookie.

 

EDIT - Post anterior feito enquanto estava escrevendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal infelismente nao posso tirar os echos principalmente aqueles que estao escritos

 

Echo <- e o echo ->,pq se nao a tela do navegador ira criar muitos e muitos pontinhos! Se vcs testarem sem os echos verao o que ira acontecer!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode sim. Você estruturou errado, esse é o problema, um bom sistema não usa echo, só no final, esse erro não tem outra solução, nem tente ob_start por favor, é gambiarra.

 

Separação de camadas não é só uma organização, ela resolve problemas também. você não pode simplesmente jogar echo para todo lado. veja a fantástica obra prima da web aka protocolo HTTP: http://www.ietf.org/rfc/rfc2616.txt

 

E direto da documentação do PHP:

 

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

 

A setcookie nada mais é que um alias para o header com uma API amigável para cookies.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo entendi,entao aliaonde esta os echos eu posso fazer da seguinte forma irei tirar o echo dai ira aparecer vaaarios pontos..o que vou tentar e colocar este codigo que faz aparecer varios pontos dentro de uma div e oculta-la....postarei o resuktado se deu certo ou nao em breve ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

obg enrico agradeço pela ajuda...vamos la enrico,seguinte eu tirei todos os echos! e o comando funciona,so que tem um porem,eu nao posso tirar este comando:

 

echo str_pad('', 1024, '.');

 

 

que esta vindo antes de uma cookie...pois este comando é aquele que cria varios pontos na tela e apártir dai ele pega a velocidade da taxa de transferencia em kb/s da sua internet,sem este comando o teste de conexao nao funciona,dai eu pensei em uma gambiarra,pois seguinte:

 

1- index.php -> é aonde esta todo codigo e estes acima que te mostrei,como o cookie nao pode aver nenhum echo antes dele,logicamente o teste de conexao nao ira funcionar..entao,terei que mover o conteudo do index.php para outro projeto chamado home.php,e no index,php deixarei o comando de teste de velocidade e ao fim do teste ele ira gerar uma session contendo a velocidade de conexao,depois irei ser redirecionado para o index.php e ira ser criada uma cookie e dentro da cookie nada mais é do que esta session,entende ou tem ideia melhor???

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi,enrico eu olhei o comando e ele nao da muiiiito certo,sempre retorna valores incertos,o comando do rapaz,seria uma bao colocar um medidor de velocidade via javascript ja que meu site é necessario o uso do javascript pq sem ele o site nao roda... ate agora cara nao consiga achar nennhum javascript que mostre tao bem como este do php,este do php se pareçe muiito com o do rj net velocimetro antigamente media certinho a velocidade de conexao,é..acho que vou fazer aquela gambiarra mesmo,caso estiver outra ideia poste....

Compartilhar este post


Link para o post
Compartilhar em outros sites

O medidor realmente confiável: http://www.speedtest.net/ é feito em flash, pois a velocidade, você não vai medir muito bem com o lado servidor, seria muito melhor usando JS, fazendo chamadas ajax e medindo o tempo dessa chamada, essa forma apresentada neste código que você postou já é uma gambiarra por si só. Se você for usar curl para fazer uma conexão e baixar um arquivo e ver o tempo que demorou, por exemplo, você vai medir a velocidade de conexão do server. E para testar esse tipo de coisa, use um servidor real, não localhost.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hm entendi..voce disse flash correto!,acho que da pra fazer isso talvez ultilizando o action script 3.0 ou ate mesmo o 2.0,vou pesquisar de como fazer isso,depois é so pegar e jogar pra uma variavel javascript... obg!

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.