Xmooka 5 Denunciar post Postado Janeiro 26, 2016 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
ESerra 744 Denunciar post Postado Janeiro 26, 2016 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
Xmooka 5 Denunciar post Postado Janeiro 26, 2016 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 Santana 172 Denunciar post Postado Janeiro 26, 2016 http://blog.thiagobelem.net/resolvendo-o-problema-de-headers-already-sent/ Compartilhar este post Link para o post Compartilhar em outros sites
Xmooka 5 Denunciar post Postado Janeiro 26, 2016 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 864 Denunciar post Postado Janeiro 26, 2016 Não pode haver saídas ao navegador antes de header(). Você tem código HTML antes de header(). Esse é o problema Leia mais neste link Compartilhar este post Link para o post Compartilhar em outros sites
Xmooka 5 Denunciar post Postado Janeiro 26, 2016 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
Rogério Santana 172 Denunciar post Postado Janeiro 26, 2016 O seu Config.inc.php tem HTML -> <p><small><b><span> = código HTML, basta inverter. <?php session_start();?> <?php require("_app/Config.inc.php");?> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Janeiro 26, 2016 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
Xmooka 5 Denunciar post Postado Janeiro 26, 2016 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
Beraldo 864 Denunciar post Postado Janeiro 26, 2016 É 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