dudollar 0 Denunciar post Postado Janeiro 8, 2014 Olá, estou com este problema do tópico, Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent, só que ele somente ocorre no servidor que o site está hospedado, quando eu hospedo o site no meu computador não ocorre esse erro. Aqui está o código php da página. <?php session_start(); require_once('include/mysqli.php'); if(isset($_POST['usuario'])){ $sql = "SELECT * FROM `usuario`;"; $resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR); while ($usr = $resultado->fetch_object()) { if($usr->senha==$_POST['senha']){ if($usr->usuario==$_POST['usuario'] || $usr->email==$_POST['usuario']){ $_SESSION['usuario']=$usr->usuario; } } } } ?> Já olhei diversas vezes o erro na internet, inclusive muitos deles aqui no fórum, e nenhum deles funcionou. Já vi erro de linha em branco, o meu não tem, já tentei adicionar ob_start(); não funcionou. A versão do php do servidor é o mesmo do meu computador e o erro só ocorre lá. Alguém aqui do fórum pode me ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Janeiro 8, 2014 Salve o arquivo como UTF-8 sem B.O.M. Compartilhar este post Link para o post Compartilhar em outros sites
dudollar 0 Denunciar post Postado Janeiro 8, 2014 Salve o arquivo como UTF-8 sem B.O.M. Já havia feito, mas refiz e fiz o upload, mas continua do mesmo jeito. Compartilhar este post Link para o post Compartilhar em outros sites
webdevbr 35 Denunciar post Postado Janeiro 8, 2014 Nunca feche a tag ?> em arquivos apenas PHP, isso pode causar erros. as header de sua página ja foram enviadas antes do session, provavelmente porque continha um espaçço depois do fechamento da tag ?> em algum arquivo anterior ou incluido... tente remover a tag de fechamento PHP ?> no final de todos seus arquivos que sejam apenas PHP http://www.sitepoint.com/should-you-close-your-php-code-tags/ Compartilhar este post Link para o post Compartilhar em outros sites
dudollar 0 Denunciar post Postado Janeiro 8, 2014 Nunca feche a tag ?> em arquivos apenas PHP, isso pode causar erros. as header de sua página ja foram enviadas antes do session, provavelmente porque continha um espaçço depois do fechamento da tag ?> em algum arquivo anterior ou incluido... tente remover a tag de fechamento PHP ?> no final de todos seus arquivos que sejam apenas PHP http://www.sitepoint.com/should-you-close-your-php-code-tags/ Então, o arquivo não é apenas php, eu postei apenas a parte php. Compartilhar este post Link para o post Compartilhar em outros sites
webdevbr 35 Denunciar post Postado Janeiro 8, 2014 Ok, se analizar bem o artigo: se no final do seu arquivo conter PHP, não feche a tag ?> e esteja certo de que não espaços antes do <?, só sei que de algum lugar as headers ja foram enviadas.., tente mandar o código ompleto (com a db escondida) Compartilhar este post Link para o post Compartilhar em outros sites
dudollar 0 Denunciar post Postado Janeiro 8, 2014 Ok, se analizar bem o artigo: se no final do seu arquivo conter PHP, não feche a tag ?> e esteja certo de que não espaços antes do <?, só sei que de algum lugar as headers ja foram enviadas.., tente mandar o código ompleto (com a db escondida) Aqui está o código completo <!doctype html> <html> <head> <meta charset="utf-8"> <title>Dudollar</title> <link rel="shortcut icon" href="/favicon.ico" /> <link href="estilo.css" rel="stylesheet" type="text/css"> <?php session_start(); require_once('include/mysqli.php'); if(isset($_POST['usuario'])){ $sql = "SELECT * FROM `usuario`;"; $resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR); while ($usr = $resultado->fetch_object()) { if($usr->senha==$_POST['senha']){ if($usr->usuario==$_POST['usuario'] || $usr->email==$_POST['usuario']){ $_SESSION['usuario']=$usr->usuario; } } } } ?> <script type="text/javascript" src="script.js"></script> </head> <body> <div id="menus"> <div id="menu"><a href="index.php" class="ativado">Início</a></div> <div id="menu"><img src="imagens/nada.png"></div> <div id="menu"><a href="arquivos.php">Arquivos</a></div> <div id="menu"><img src="imagens/nada.png"></div> <div id="menu"><a href="/forum/index.php">Fórum</a></div> <div id="menu"><img src="imagens/nada.png"></div> <div id="menu"><a href="contato.php">Contato</a></div> <div id="menu"><img src="imagens/nada.png"></div> <div id="menu"><a href="http://dev.bukkit.org/profiles/Duduu197/" target="_blank">Bukkit</a></div> <?php if(isset ($_SESSION['usuario'])){ echo "<div id='login'><a href='logout.php'>Sair</a></div><div id='login'><img src='imagens/nada.png'></div><div id='login'><a href='minhaconta.php'>".$_SESSION['usuario']."</div>"; }else{ echo "<div id='login'><a href='registrar.php'>Registre-se</a></div><div id='login'><img src='imagens/nada.png'></div><div id='login' onClick='exibirLogin();'><a href='#'>Login</a></div>"; } ?> </div> <div id="corpo"> <div id="logar"> <form action="login.php" method="post"> <table> <tr><td>Usuário</td><td><input type="text" name="usuario" value="<?php if(isset($_SESSION['login'])){ echo $_SESSION['login'];} ?>"></td></tr> <tr><td>Senha</td><td><input type="password" name="senha"></td></tr> <tr><td>Lembrar</td><td><input type="checkbox" name="lembrar" <?php if(isset($_SESSION['login'])){ echo "checked";} ?>></td></tr> <input type="hidden" name="pagina" value="<?php echo basename($_SERVER['PHP_SELF']);?>"> <tr><td colspan="2"><input type="submit" value="Logar"></td></tr> </table> </form> </div> <div id="lateral"> <?php if(isset($_SESSION['usuario'])){ $sql = "SELECT `cargo` FROM `usuario` where `usuario`='".$_SESSION['usuario']."';"; $resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR); $cargo="membro"; while ($post = $resultado->fetch_object()) { $cargo=$post->cargo; }$resultado->free(); if($cargo=="postador"){ echo "<div id='lpost'><a href='postar.php'>Postar</a></div>"; } } ?> <div id="lpost"> <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank"> <input type="hidden" name="cmd" value="_s-xclick"> <input type="hidden" name="hosted_button_id" value="PHY7TMEAHFHGW"> <input type="image" src="https://www.paypalobjects.com/pt_BR/BR/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - A maneira mais fácil e segura de efetuar pagamentos online!"> <img alt="" border="0" src="https://www.paypalobjects.com/pt_BR/i/scr/pixel.gif" width="1" height="1"> </form> </div> </div><?php $sql = "SELECT * FROM `post` AS Post ORDER BY Post.`cod` DESC LIMIT 5"; $resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR); while ($post = $resultado->fetch_object()) { ?> <div id="post"> <hr color="#FFFFFF" size="2"> <h1><?php echo $post->titulo?></h1> <p><?php echo $post->conteudo?></p> <h3><?php echo $post->postador?>, <?php echo $post->data?></h3> <hr color="#FFFFFF" size="2"> </div> <?php } $resultado->free(); ?> </div> <div id="anuncio"><?php require_once('include/mysqli.php'); $sql = "SELECT * FROM `anuncio`"; $resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR); $linhas=$resultado->num_rows; $linha=rand(1,$linhas); $i=1; while ($usr = $resultado->fetch_object()) { if($i==$linha){ echo "<a href='".$usr->link."' target='blank'><img src='imagens/anuncio/".$usr->imagem."' width='1050' height='140'></a>"; } $i++; } ?></div> </body> </html> O estranho é que ele somente da esse erro, quando está no servidor, se eu compilo no meu computador, ele vai sem erro. Mas, respondendo a você, o meu código não termina com ?>, há algumas tags depois do ?> mas nenhum texto. Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Janeiro 8, 2014 O session_start() tem que vir antes de qualquer coisa... não pode ter nada antes dele. Compartilhar este post Link para o post Compartilhar em outros sites
dudollar 0 Denunciar post Postado Janeiro 8, 2014 O session_start() tem que vir antes de qualquer coisa... não pode ter nada antes dele. Antes eu fiz isso, porém coloquei depois do html, antes do head, agora coloquei antes do !doctype, e funcionou. Obrigado a todos, mas somente uma última dúvida, que é com a função header: Cógido: <?php session_start(); require_once('include/mysqli.php'); if(isset($_POST['usuario'])){ $sql = "SELECT * FROM `usuario`;"; $resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR); while ($usr = $resultado->fetch_object()) { if($usr->senha==$_POST['senha']){ if($usr->usuario==$_POST['usuario'] || $usr->email==$_POST['usuario']){ $_SESSION['usuario']=$usr->usuario; if($_POST['lembrar']){ $_SESSION['login']=$usr->usuario; }else{ unset($_SESSION['login']); } } } } } if(isset($_POST['pagina'])){ header("Location: ".$_POST['pagina']); }else{ header("Location: index.php"); } Esse é o código todo, e seguindo a recomendação, deixei a tag aberta, mas ele executa esse erro: Warning: Cannot modify header information - headers already sent by (output started at /home/rpcraftm/public_html/meusite/include/mysqli.php:1) in /home/rpcraftm/public_html/meusite/login.php on line 24 Mas no logout, que tem o mesmo header do else, executa perfeitamente, e para garantir que a variável não estivesse nula, eu fiz um echo até mesmo para testar se estava para a página correta. Só falta esse erro. Obrigado a todos pelo suporte, vlw. Compartilhar este post Link para o post Compartilhar em outros sites
webdevbr 35 Denunciar post Postado Janeiro 9, 2014 Hm, o erro eh na host ou em servidor local? talvez seja um bug do seridor, bom a header("Location: "); estranhamente está sendo tratada como ja enviada. Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Janeiro 9, 2014 Não há bug algum, basta ler o erro, está dizendo que o cabeçalho foi enviado no arquivo mysqli.php, na primeira linha para ser mais específico... Compartilhar este post Link para o post Compartilhar em outros sites
Raphael Barros 48 Denunciar post Postado Janeiro 9, 2014 O ESerra já respondeu, você está setando o cabeçalho da página no arquivo mysqli.php, e depois tentando alterá-lo no final do código postado acima Compartilhar este post Link para o post Compartilhar em outros sites
PHP_desenvolvimento 2 Denunciar post Postado Janeiro 9, 2014 O session deve vir no index e sempre acima de qualquer coisa: <?php session_start(); ?> <html> ...... Compartilhar este post Link para o post Compartilhar em outros sites
dudollar 0 Denunciar post Postado Janeiro 9, 2014 Hm, o erro eh na host ou em servidor local? talvez seja um bug do seridor, bom a header("Location: "); estranhamente está sendo tratada como ja enviada. Os erros são no host. Agora para todo mundo: Mas o erro só ocorre no host. E para quem disse que a página já foi enviada, o apache não deveria enviar a página só depois de compilar ela toda? Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Janeiro 9, 2014 Os erros são no host. Agora para todo mundo: Mas o erro só ocorre no host. E para quem disse que a página já foi enviada, o apache não deveria enviar a página só depois de compilar ela toda? O erro só ocorre no host porque ele está configurado como servidor de produção, existe uma diretiva (que não me lembro qual é), que segura todo o buffer de saída, funciona igual o ob_start(). Sobre o apache só enviar a página depois de compilar, em primeiro lugar, o apache não compila nada, ele recebe o que o PHP interpretou e só. Em segundo lugar, o que está sendo enviado é o cabeçalho (header)... provavelmente exista algum espaço em branco no arquivo que eu informei que é o problema. Compartilhar este post Link para o post Compartilhar em outros sites
dudollar 0 Denunciar post Postado Janeiro 9, 2014 O erro só ocorre no host porque ele está configurado como servidor de produção, existe uma diretiva (que não me lembro qual é), que segura todo o buffer de saída, funciona igual o ob_start(). Sobre o apache só enviar a página depois de compilar, em primeiro lugar, o apache não compila nada, ele recebe o que o PHP interpretou e só. Em segundo lugar, o que está sendo enviado é o cabeçalho (header)... provavelmente exista algum espaço em branco no arquivo que eu informei que é o problema. Primeiramente devo dizer que escrevi php, mas mudei para apache. Ok, agora ao assunto, adicioneu ob_start(); e funcionou. '-' OBRIGADO A TODOS, peço desculpa pelas noobadas. sou iniciante em php e a minha escola só ensina java, html, jsp e sql. Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Janeiro 9, 2014 O correto é corrigir o problema, ob_start() não serve para isto que você uso. Compartilhar este post Link para o post Compartilhar em outros sites
dudollar 0 Denunciar post Postado Janeiro 9, 2014 O correto é corrigir o problema, ob_start() não serve para isto que você uso. alguma dica para resolver? Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Janeiro 9, 2014 alguma dica para resolver? Já citei o meu palpite no post #15. Compartilhar este post Link para o post Compartilhar em outros sites
dudollar 0 Denunciar post Postado Janeiro 9, 2014 Já citei o meu palpite no post #15. É que eu não sei como mudar, mas já que o ob_start funcionou, gambiarra nunca é demais, se é que isso é uma gambiarra. Compartilhar este post Link para o post Compartilhar em outros sites