ademirs 0 Denunciar post Postado Novembro 8, 2011 Boa tarde amigos: Algo está me deixando com dor de cabeça (Como se eu fosse o único...rsrs). Seguinte: Imaginem uma aplicação MVC rodando em dois servidores, A e B. No servidor "A" (PHP Version 5.2.17) a aplicação funciona muito bem, sem erros, sem problemas. No servidor "B" (PHP Version 5.2.17) é uma tragédia, simplesmente não funciona, dá erro. Warning: Cannot modify header information - headers already sent by (output started at /home/[...]/index.php:0) in /home/[...]/helpers/RedirHelper.php on line 27 Este é o código que apresenta o erro: <?php ob_start(); [...] protected function goTo( $dados){ /*linha27*/ header("Location: /" . CAMINHO_ADM . $dados); //Usei esta P.O.G. abaixo, até funciona no Firefox e Chrome mas no IE8 e Safari não consigo fazer login //echo "<meta HTTP-EQUIV='Refresh' CONTENT='0; URL=http://www.meuprojeto.com.br".CAMINHO_ADM.$dados."'>"; } public function goToUrl( $url ){ header("Location: " . $url); //Usei esta P.O.G. abaixo, até funciona no Firefox e Chrome mas no IE8 e Safari não consigo fazer login //echo "<meta HTTP-EQUIV='Refresh' CONTENT='0; URL=".$url."'>"; } [...] ?> Alguém teria alguma idéia do que estou fazendo de errado ou onde pode estar a solução? Abraços Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 8, 2011 ob_start(); [...] você ja enviou uma saida para o navegador por isso o header nao funciona, da erro... Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Novembro 8, 2011 Verifique essa 'linha 0' aí, pra ver se não há caracteres invisíveis. No seu editor, marque para ver todos os caracteres (parágrafos, tabulações, etc...) Compartilhar este post Link para o post Compartilhar em outros sites
ademirs 0 Denunciar post Postado Novembro 9, 2011 Olá Henrique, Olá Igor, olá amigos da comunidade. Primeiramente obrigado pelas respostas. Verifiquei a linha 0, e está limpa. Tirei o ob_start(); e dai não funciona nem no servidor "A" que é Linux Centos - PHP 5.2.17, o "B" é Linux Debian - PHP 5.2.17. Sei lá meus amigos, eu devo estar "errando feio" em algo muito simples, mas tá difícil eu saber onde. :ermm: Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 9, 2011 Configure o log de erros do PHP e veja se há alguma mensagem Configuração de log e eventos de erros do PHP http://forum.imasters.com.br/topic/447379-configuracao-de-log-e-eventos-de-erros-do-php/ veja também Dicas para uso de variáveis de sessão http://forum.imasters.com.br/topic/342563-dicas-para-uso-de-variaveis-de-sessao/ Compartilhar este post Link para o post Compartilhar em outros sites
ademirs 0 Denunciar post Postado Novembro 9, 2011 No servidor "A" a diretiva output_buffering está em >> 4096 e 4096 No servidor "B" a diretiva output_buffering está em >> no value e no value Será que isso está afetando meu script no servidor "B"? Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Novembro 9, 2011 É difícil dizer. A linha zero que você checou foi no index.php né? Só confirmando... Posta seu index.php e os arquivos subsequentes até àquele que, de fato, usa esse "helper" aí. Compartilhar este post Link para o post Compartilhar em outros sites
ademirs 0 Denunciar post Postado Novembro 9, 2011 Bom dia. Sim Bruno, é a linha 0 do index do MVC. Está assim: <?php ob_start(); session_start(); também tentei destas formas já: <?php ob_start(); if (!isset($_SESSION)) { session_start(); } <?php session_start(); ob_start(); Assim não dá erro mas não efetiva o login <?php // Assim não dá erro mas não efetiva o login protected function goTo( $dados ){ $path=$_SERVER['SERVER']; echo "<script>location.href = '".$path.CAMINHO_ADM.$dados ."';</script>"; } public function goToUrl( $url ){ echo "<script>location.href = '".$url."';</script>"; } Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Novembro 9, 2011 No servidor "B" a diretiva output_buffering está em >> no value e no value Sim, na verdade seu código está 'errado', vamos dizer assim, por isso no servidor B não funcional nem a 'pal'. Como no servidor A o output já está setado para 4096, independentemente de como está a saída de seus cabeçalhos ele sempre vai funcionar. Agora o ideal, seria fazer o que o Bruno disse, poste a sequencia dos scripts até cair nesses helper's, para ver se não tem nenhuma saída e corrigir isso. Abraços :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Novembro 9, 2011 experimenta a funcao header_list e nos poste aki o q ela retornou... http://br.php.net/manual/pt_BR/function.headers-list.php Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Novembro 9, 2011 Assim, você precisa mesmo manipular o buffer de saída (output buffer)? Estou mexendo com algo relativo ao buffer de saída atualmente e realmente é complicado. Mantenha tudo de forma simples, removendo todas os usos de ob_* e trabalhando com as sessões da forma mais bpasica possível, algo como: if( ! isset( $_SESSION ) ) { session_start(); } $_SESSION['foo'] = 'bar'; Os redirecionamentos, esqueça-os por JavaScript. Faça com o Location. :thumbsup: E então, onde a checagem se fizer necessária: if( ! isset( $_SESSION ) ) { session_start(); } if( ! isset( $_SESSION['foo'] ) ) { $obj -> goToUrl( 'http;//' ); } // Usa $_SESSION['foo'] E o método redirecionador alterado...? public function goToUrl( $url ){ header( sprintf( 'Location: %s', $url ) ); } Veja se resolve. Compartilhar este post Link para o post Compartilhar em outros sites
ademirs 0 Denunciar post Postado Novembro 9, 2011 Olá amigos, boa tarde. Concordo André, realmente é algo que precisa ser visto e corrigido, farei isto. Temporariamente, ajustei a diretiva output_buffering para 4096 e resolveu o problema, mas vou melhorar esse fonte sim. Igor, segue abaixo o retorno do header_list: array(3) { [0]=> string(38) "Expires: Thu, 19 Nov 1981 08:52:00 GMT" [1]=> string(77) "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" [2]=> string(16) "Pragma: no-cache" } Bruno, ajustei da seguinte forma os redirecionamentos (Temporariamente com output_buffering = 4096 e ob_start();): Vou estudar tuas dicas acima e depois posto aqui o que consegui... protected function go( $dados ){ $path=$_SERVER['SERVER']; header('Location: '.$path.CAMINHO_ADM.$dados); } public function goToUrl( $url ){ header('Location: '.$url); } Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Novembro 10, 2011 Na verdade, não é muito recomendado usar buffer :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Novembro 10, 2011 Na verdade, não é muito recomendado usar buffer :thumbsup: Opa, opa, esse comentário me interessa... Por quê? Compartilhar este post Link para o post Compartilhar em outros sites
ademirs 0 Denunciar post Postado Novembro 11, 2011 Fiquei pensando sabe, se eu manter o output_buffering como "no value", será que isso não pode prejudicar de alguma maneira o desempenho dos Frameworks de segurança? Apenas uma reflexão, pode ser que falei bobagem... Compartilhar este post Link para o post Compartilhar em outros sites