Ir para conteúdo

POWERED BY:

Arquivado

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

dudollar

Warning: session_start() [function.session-start]: Cannot send session

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

alguma dica para resolver?

Já citei o meu palpite no post #15.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

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