테스트 사이트 - 개발 중인 베타 버전입니다

모바일에서 소셜 로그인을 하면 Cannot modify header information  오류가 뜹니다. 채택완료

sjw77 1년 전 조회 2,115

 

Warning: Cannot modify header information - headers already sent by (output started at /home/zzz/cccc/www/theme/custum01/tail.sub.php:26) in /home/zzz/cccc/www/plugin/social/Hybrid/Auth.php</b> on line 369

 

모바일에서 네이버나 카카오를 통해 로그인을 하려고 하면 이런 식으로 오류가 뜹면서 진행이 안됩니다.

pc에서는 멀쩡히 되는데 mobile에서만 이런 오류가 뜨네요.

 

검색해보니<?앞에 공백이 있으면 그런 오류가 생긴다 하는데 찾아봐도 공백도 없고 왜 안되는지 모르겠습니다.

아래는 오류가 발생하는 파일들인데 왜 모바일에서만 문제가 생기는지 제발 알려주세요ㅠ

 

 

tail.sub.php

</p>

<p><?php</p>

<p>if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가</p>

<p> </p>

<p>?></p>

<p></body></p>

<p></html></p>

<p><?php echo html_end(); // HTML 마지막 처리 함수 : 반드시 넣어주시기 바랍니다. ?></p>

<p>

 

Auth.php

</p>

<p>public static function redirect($url, $mode = "PHP") {</p>

<p>        if(!$mode){</p>

<p>            $mode = 'PHP';</p>

<p>        }</p>

<p>       </p>

<p>        Hybrid_Logger::info("Enter Hybrid_Auth::redirect( $url, $mode )");</p>

<p> </p>

<p>        // Ensure session is saved before sending response, see <a href="https://github.com/symfony/symfony/pull/12341" target="_blank" rel="noopener noreferrer">https://github.com/symfony/symfony/pull/12341</a></p>

<p>        if ((PHP_VERSION_ID >= 50400 && PHP_SESSION_ACTIVE === session_status()) || (PHP_VERSION_ID < 50400 && isset($_SESSION) && session_id())) {</p>

<p>            session_write_close();</p>

<p>        }</p>

<p> </p>

<p>       </p>

<p>        if ($mode == "PHP") { //ex)$url : <a href="http://xn--v52b19lba301k.kr/plugin/social/?hauth.start=Naver&hauth.time=1547706764" target="_blank" rel="noopener noreferrer">http://xn--v52b19lba301k.kr/plugin/social/?hauth.start=Naver&hauth.time=1547706764</a></p>

<p>            //echo $url;exit;</p>

<p>            header("Location: $url");</p>

<p>        } elseif ($mode == "JS") {</p>

<p>            echo '<html>';</p>

<p>            echo '<head>';</p>

<p>            echo '<script type="text/javascript">';</p>

<p>            echo 'function redirect(){ window.top.location.href="' . $url . '"; }';</p>

<p>            echo '</script>';</p>

<p>            echo '</head>';</p>

<p>            echo '<body onload="redirect()">';</p>

<p>            echo 'Redirecting, please wait...';</p>

<p>            echo '</body>';</p>

<p>            echo '</html>';</p>

<p>        }</p>

<p> </p>

<p>        die();</p>

<p>    }</p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트

다음과 같이 해볼 수 있을 것 같습니다.

 

tail.sub.php 수정

</p>

<p><?php

if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

?>

</body>

</html></p>

<p>

 

tail.sub.php 파일에서 <?php 태그 이전에 공백이나 다른 출력이 없는지 확인해 보세요. 파일의 시작이 위와 같이 되어야 합니다:

 

Auth.php 파일 수정

</p>

<p>public static function redirect($url, $mode = "PHP") {

    if (!$mode) {

        $mode = 'PHP';

    }</p>

<p>    Hybrid_Logger::info("Enter Hybrid_Auth::redirect( $url, $mode )");</p>

<p>    // Ensure session is saved before sending response

    if ((PHP_VERSION_ID >= 50400 && PHP_SESSION_ACTIVE === session_status()) || (PHP_VERSION_ID < 50400 && isset($_SESSION) && session_id())) {

        session_write_close();

    }</p>

<p>    ob_start(); // Start output buffering</p>

<p>    if ($mode == "PHP") {

        header("Location: $url");

    } elseif ($mode == "JS") {

        echo '<html>';

        echo '<head>';

        echo '<script type="text/javascript">';

        echo 'function redirect(){ window.top.location.href="' . $url . '"; }';

        echo '</script>';

        echo '</head>';

        echo '<body onload="redirect()">';

        echo 'Redirecting, please wait...';

        echo '</body>';

        echo '</html></p>

<p>

 

Auth.php 파일에서 헤더를 수정하는 부분을 보완해보세요. header 함수 호출 이전에 다른 내용이 출력되지 않도록 한 후에, 위와 같이 ob_start() 및 ob_end_flush()를 사용하여 출력을 버퍼링 하시면 되지 않을까 합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

s
sjw77
1년 전
ob_start()랑 ob_end_flush()를 아디쯤에서 사용하여 출력 버퍼링을 하는지 알려주실 수 있을까요?
웹메이킹
1년 전
문의하신 소스코드 위치에 적용하시면 됩니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인