2012-11-10 3 views
-1
을 보내

가능한 중복 :
“Warning: Headers already sent” in PHPPHP는 OOP : 헤더가 이미

I, 나는이 스크립트에서 헤더를 설정하기 전에 텍스트를 출력 아니에요 100 % 확신하지만, 이 오류가 발생합니다. Index.php는의

warning: Cannot modify header information - headers already sent by (output started at /home/x/public_html/index.php:4) in /home/x/public_html/core/functions.php on line 25 

최고

<?php 
require_once "core/functions.php"; 
$actions = new Actions(); 
$actions->isUserLogged($_SERVER['REMOTE_ADDR'], $_COOKIE['cData']); 
?> 
<!DOCTYPE html>... 

코어/functions.php

<?php 

include_once('connection.php'); 

class Actions { 

private $db; 

public function __construct() { 

    $this->db = new Connection(); 
    $this->db = $this->db->dbConnect(mysql info); 

} 

public function isUserLogged($currentIP, $cData) { 
    if(!empty($cData)){ //if cookie is not empty 
     $getData = $this->db->query("SELECT loggedIP FROM registery WHERE session='".$cData."'")->fetchColumn(); //finding entry in registery. 
     $loggedIP = $getData['loggedIP']; 
     if($currentIP == $loggedIP) {return true;} //if that loggedIP and currentIP matces -> proceed. 
     else { return setcookie('cData','',time()-31536000); //this is where the error points. 
      return header("location: login.php");} // else unset cookie and redirect to login. 

    } else {  
     return header("location: login.php"); 
    } 


    } 
} 
?> 

connection.php

<?php 
error_reporting(E_ALL); 

class Connection { 

public function dbConnect($server, $username, $password, $db){ 

    return new PDO('mysql:host='.$server.';dbname='.$db, $username, $password); 

} 

} 


?> 

사람이 좀 걸릴 너무 친절 될 경우 내 실수를 찾아 낼 시간이야. 바바는 "위해서는 ini_set을 사용하도록 제안

솔루션 ("display_errors를 "을"On "으로);" 그리고 마술처럼 그 문제를 해결했습니다 ... 나는 왜 모두 ty일까요? :-)

+1

표시되는 오류가 있습니까? 표시 오류 행을 주석 처리하십시오. – Cups

+1

어떤 출력도이 오류를 유발합니다. 여기에는 공백 (공백, CRLF 등) 및 바이트 순서 표시가 포함됩니다 (파일이 유니 코드로 인코딩 된 경우 바이트 순서 표시가 없음을 확인하십시오). – Ynhockey

+0

나는 html 코드를 인쇄 한 후에 session_start, cookie_set 또는 header *를 사용했다고 생각한다. html 코드를 인쇄 할 때 "200 OK, content type text/html"이라는 헤더를 보내고이 헤더를 수정하려는 함수는 불가능합니다. – artragis

답변

1

확실하지 않지만

<?php 
^--------------------------- Most likely the cause 
error_reporting(E_ALL); 

를 참조 connection.php

에 빈 공간을 다루고있는 당신은 또한

error_reporting(E_ALL); 
ini_set("display_errors","On"); 
+0

없이 UTF-8과 UTF-8로 파일을 포맷 할 수 있습니다. 그렇게 생각하지 않습니다. 아마 Stackoverflow가 구조를 망칠 것입니다. –

+0

라인 번호를 살펴보면''태그의 전후에 새로운 라인이 있는지 확인합니다 ... 이것이 문제라고 확신합니다 – Baba

+0

바이트 순서 표시? –

0
을 전환 한 경우 PHP 오류를 표시하려고합니다

UTF-8 byte order mark 일 수 있습니다. 이 경우 인코딩을 "BOM없이 utf-8"로 변경하십시오.

편집 : 어떻게 여기에 공간 (connection.php, 마지막 행)에 대한 :

꽤 문제가 가끔 있어요
?> 
    --^------- there 
+0

불행히도 이것도 작동하지 않았다 –

+0

오케이, 어때? (편집) – cypher

+0

끝에 공백이 없으며 닫는 부호도 제거하려고했으나 도움이되지 않았습니다. –

0

. 나는 그것을 여러 번 가지고 자바 스크립트를 대신 사용하기로 결정했습니다. 예 :

echo '<script type="text/javascript">window.location ="login.php";</script>'; 

당신이 찾고있는 해결책이 아닐지라도 이것은 아마도 당신에게도 도움이 될 것입니다.

희망이 도움이됩니다.

관련 문제