모바일에서 소셜 로그인을 하면 Cannot modify header information 오류가 뜹니다. 채택완료
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개
다음과 같이 해볼 수 있을 것 같습니다.
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개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인