Ir para conteúdo

Arquivado

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

Xmooka

Cannot modify header information

Recommended Posts

Opa pessoal!


Tudo certo com vocês? Espero que sim!


Estou desenvolvendo um sistema pra minha empresa, e ao hospedar o mesmo em um servidor obtive o seguinte erro na página de login.


Erro na Linha: #68 :: Cannot modify header information - headers already sent by (output started at /home/emtellogistica/www/index.php:62)

/home/emtellogistica/www/index.php



No meu servidor LOCAL o erro simplesmente não ocorre e tudo funciona bem. Estudando sobre o erro vi que não é possibilitado o envio de header após output, mas, até onde sei, não houve output HTML até a parte em que dou o "Location" no usuário após logado


Segue o código:







<?php require("_app/Config.inc.php");?>
<?php session_start();?>
<?php $login = new Login(3);

if($login->CheckLogin()):
header("Location: home.php");
endif;?>
<!DOCTYPE html>
<html>




<head>
<!-- Meta, title, CSS, favicons, etc. -->
<meta charset="utf-8">
<title>EMTEL - Sistema de Gestão</title>
<meta name="keywords" content="HTML5, Bootstrap 3, Admin Template, UI Theme"/>
<meta name="description" content="Alliance - A Responsive HTML5 Admin UI Framework">
<meta name="author" content="ThemeREX">
<meta name="viewport" content="width=device-width, initial-scale=1.0">




<!-- Font CSS (Via CDN) -->
<link rel='stylesheet' type='text/css' href='http://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700'>
<link href='https://fonts.googleapis.com/css?family=Lato:400,300,300italic,400italic,700,700italic' rel='stylesheet'
type='text/css'>




<!-- Theme CSS -->
<link rel="stylesheet" type="text/css" href="assets/skin/default_skin/css/theme.css">




<!-- Admin Forms CSS -->
<link rel="stylesheet" type="text/css" href="assets/admin/forms/css/forms.css">




<!-- Favicon -->
<link rel="shortcut icon" href="assets/img/favicon.ico">




<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>




<body class="external-page sb-l-c sb-r-c">




<!-- Start: Main -->
<div id="main" class="animated fadeIn">




<!-- Start: Content-Wrapper -->
<section id="content_wrapper">




<!-- begin canvas animation bg -->
<div id="canvas-wrapper">
<canvas id="demo-canvas"></canvas>
</div>




<!-- Begin: Content -->
<section id="content">




<!-- Login -->
<div class="admin-form theme-primary mw320" id="login">

<div class="panel mw320">




<?php $dataLogin = filter_input_array(INPUT_POST, FILTER_DEFAULT);
if(!empty($dataLogin['adminlogin'])):
$login->ExeLogin($dataLogin);
if(!$login->getResult()):
WSErro($login->getError()[0], $login->getError()[1]);
else:
header("Location: home.php");
endif;
endif;

$get = filter_input(INPUT_GET, 'exe', FILTER_DEFAULT);
if(!empty($get)):
if($get == 'restrito'):
WSerro('<b>Oops:</b> Você tentou acessar uma área restrita! Favor efetue login.', WS_ALERT);
elseif($get == 'logoff'):
WSErro('<b>Sucesso ao deslogar:</b> Sua sessão foi finalizada com sucesso', WS_ACCEPT);
endif;
endif;?>


<form name="adminlogin" method="post" action="index.php">
<div class="panel-body pn mv10">




<div class="section">
<label for="username" class="field prepend-icon">
<input type="text" name="user" id="username" class="gui-input"
placeholder="Usuário">
<label for="username" class="field-icon">
<i class="fa fa-user"></i>
</label>
</label>
</div>
<!-- end section -->




<div class="section">
<label for="password" class="field prepend-icon">
<input type="password" name="pass" id="password" class="gui-input"
placeholder="Senha">
<label for="password" class="field-icon">
<i class="fa fa-lock"></i>
</label>
</label>
</div>
<!-- end section -->



Não sei mais o que fazer...


Porque este erro ocorre em um servidor WEB e não ocorre no meu servidor LOCAL?


Obs: Todos as mensagens de erro estão habilitadas no meu servidor local.


Agradeço desde já toda e qualquer ajuda.


valeu pessoal!


Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você inicia uma sessão é criado um cookie, neste momento os cabeçalhos são enviados...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa ESerra

 

Obrigado pela resposta;

Mas então como resolver o problema? Porquê no meu servidor Local o erro não acontece?

 

Obrigado

Atte;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rogério;

 

Agradeço a atenção.

 

Eu já tinha lido esta postagem antes de postar aqui, não sei se fui "burro" mas, não consegui resolver. Não consigo achar a lógica do problema, principalmente pelo fato dele funcionar normalmente no meu servidor Local.

 

Continuo pedindo a ajuda de vocês

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo;

 

Existe uma explicação então do porque não houve o erro no meu servidor local?

 

Como vou exibir mensagem de erro naquela parte do HTML (caso o login não tenha sido efetuado por erro de senha ou similar) se eu tiver que puxar o Header la pra cima antes de qualquer HTML?

 

Tem como me da um exemplo de como deveria ficar meu código?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe uma explicação então do porque não houve o erro no meu servidor local?

Sim, existe.

Você pode estar com os erros ocultos ou com output_buffering ativado (valor maior que 0)

Habilite todas as exibições de erro, como mostrado neste tópico, na Orientação No. 2 e deixe output_buffering, no php.ini, com o valor Off.

 

 

Como vou exibir mensagem de erro naquela parte do HTML (caso o login não tenha sido efetuado por erro de senha ou similar) se eu tiver que puxar o Header la pra cima antes de qualquer HTML?

 

Tem como me da um exemplo de como deveria ficar meu código?

Você pode usar uma Estrutura MVC, separando a programação do HTML.

Outra saída é usar as Funções de Controle de Buffer, como ob_start() e ob_end_flush()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo;

 

Como ainda sou iniciante na linguagem, levaria um tempo até aprender MVC e estruturar a aplicação neste modelo, por isso, acredito que a solução mais prática e rápida seria as funções de controle...

 

Procurei no manual PHP, entendi a função delas, porém, como utilizá-las? Em que parte do código eu deveria colocar o ob_start e o ob_end_flush?

 

Agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só usar ob_start() no começo. Se você não limpar o buffer manualmente, o PHP limpa automaticamente e envia pro navegador.

 

Veja: http://www.phpit.com.br/artigos/entendendo-pra-que-serve-ob-start-ob-end-flush-ob-get-contents-e-afins.phpit

 

 

Mas procure usar MVC ou uma forma mais organizada, pra separar PHP e HTML. Seus códigos ficarão muito mais limpos e claros. Iniciante ou Avançado, qualquer um é capaz de programar de forma clara :)

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.