sitelink1  
sitelink2  
extra_vars5  
extra_vars6  
1. 첫번째 원인과 답변
Warning: Cannot modify header information - headers already sent by (output started at /home/test/public_html/test/skin/member/eng/login_check.skin.php:18) in /home/test/public_html/test/lib/common.lib.php on line 109

오류의 원인은 다른분들의 답변이 맞습니다.
header() 함수를 사용하기 전에 그 어떤 출력(공백/엔터/HTML등)도 선행되어서는 안됩니다.
그러나, 사정상 조건/분기등에 의해 (물론 피할 수 있게끔 코딩하는게 최선이지만) 뒤늦은 header() 를 사용해야 할 수가 있는데요.
이럴때는 PHP4 이상의 output buffering 기능을 사용하실 수 있습니다.
소스 코드의 최상단에 (HTML 및 그 어떤 출력도 나오기 전) 다음과 같은 소스를 삽입하세요.
ob_start();
HTML이나 기타 출력되는 값을 메모리에 저장해 두었다가 프로그램 종료시 한꺼번에 내보내는 명령입니다.
이 펑션이 호출된 이후에 header() 를 만나면 어떤 HTML 출력과도 관계 없이 정상 실행합니다.

단, 기존의 게시판이나 기타 프로그램을 수정하고 계시며, 해당 프로그램에서도 ob_start()를 중복 사용하고 있다면, 해당 프로그램에서의 ob_start() 사용 용도에 따라 HTML출력에 또다른 문제가 발생할 수 있습니다(일반적인 경우 문제 없습니다)

출처 : 지식인


1. 두번째 원인과 답변
쿠키의 경우 헤더보다 분명히 먼저와야 합니다만,
페이지를 include 해서 출력하다보면 조건이 맞지 않을때가 간혹 있습니다.
페이지의 어떤 부분에서 호출해도 문제가 되지 않을 수 있도록 제가 쓰고 있는 함수입니다.
아래의 함수를 php 함수만을 모아놓은 페이지가 있다면 그 곳에 적어주시고,
그렇지 않다면 함수가 사용될 페이지에 적어두세요.
함수 사용법은 같습니다.

bdz_setcookie(user_id, $user_id, 0)

이런 형식으로 호출하시면 됩니다. (보시면 아시겠지만, 4번째 인자는 '/'로 설정됩니다.)

function bdz_setcookie($name, $value, $expire, $path='/')
{
    if (headers_sent()) {
        $cookie = $name.'='.urlencode($value).';';
        if ($expire) $cookie .= ' expires='.gmdate('D, d M Y H:i:s', $expire).' GMT';
        echo '';
    } else {
        setcookie($name, $value, $expire, $path);
    }

}

(출처 : 'php 쿠키 소스 오류를 제발 수정해주세요!' - 네이버 지식iN)