개발자님께서 무슨이유인지는 모르겠지만, 코드상에 엉청난 오류가있었습니다.

 

원인을 못찾다가 겨우찾았네요 ;;

 

유튜브 모듈의 youtube.model.php 파일에서 자주 불러들이는 코드가 있습니다. (서버와통신하는 자료입니다.)

 

public function getRealPlaylistId($apiKey, $playlistId)

해당 메소드에서 사용되는 코드중에서 뭔가 잘못된 사항이 있습니다.

//From YouTube Server
public function getRealPlaylistId($apiKey, $playlistId)
{
   $youtube = new XFYoutube(null, $apiKey);
   if(!is_null($apiKey))
   {
      $return = !is_null($playlistId) ? $playlistId : (!is_null($this->module_info->playlist_id) ? $this->module_info->playlist_id : "PLmtapKaZsgZt3g_uAPJbsMWdkVsznn_2R"); //실시간 인기 동영상 - 한국
      $result = $youtube->playlistItems->browse("id", null, $return, 0);
      if($result === false)
      {
         $channel = $youtube->channels->browse("contentDetails", null, $return);
         if($channel === false || is_null($channel[items][0][contentDetails][relatedPlaylists][uploads]))
         {
            $channel = $youtube->channels->browse("contentDetails", null, null, $return);
            if($channel === false || is_null($channel[items][0][contentDetails][relatedPlaylists][uploads]))
            {
               $return = false;
               break;
            }
            else
            {
               $return = $channel[items][0][contentDetails][relatedPlaylists][uploads];
            }
         }
         else
         {
            $return = $channel[items][0][contentDetails][relatedPlaylists][uploads];
         }
      }
      unset($result, $channel);
   }
   else
   {
      $return = false;
   }
   return $return;
}

항목에 보시면 해당 파일 46번째줄 아래 break 를 쓴것이 보입니다.

if문에서는 절대 break 를 쓰지 않습니다.. php5.5 대에는 정상적으로 그래도 무시하고 사용한것으로 보여지나, php7.0에서는 500에러를 내뿜고 실행조차도 안해주죠. 이경우 디버그가 어려운부분이 있었습니다..;;

php 전체 에러를 남기는 에러로그를 보고 알았습니다.

 

[25-May-2016 04:02:13 Etc/GMT-9] PHP Fatal error:  'break' not in the 'loop' or 'switch' context in /여기는 나의 사이트경로다 안가르켜주지/modules/youtube/youtube.model.php on line 47

 

라고 에러가 떴습니다. 즉, break 는 loop 를 돌리는 공간이나 switch에서 반복을 중단시킬때 사용하는 목적이지 여기에서 이만 나가겠서 라고 통하는 코드가 아니라는 소리입니다.

 

그럼 정상적인 작동을 하기 위해서는 해당 46번, 47번째줄의 코드를 이렇게 바꿔야합니다.

 

$return = false;
break;

에서,

return false;

으로 한줄로 바꿔주시면 됩니다. (어차피 메소드를 빠져나가고 재일 아래 return $return 처리한 $return 값이 의도하는 바대로 false 이므로 동일합니다.)

 

이 부분만 수정하고 넘겨버리면 되겠네요.

 

람보

profile
람보입니다.
  • profile
    이부분에 Fatal Error 가 뜨곤했었는데 수정할수 있게됐네요. 감사합니다
  • profile
    php 7.0.6 + xe 1.8.20 유튜브모듈 오류나는것 자세히 좀 알려주세요 !! ㅜㅜ 적용 했는데 여전히 500에러 나요!!!
  • profile profile
    제가 발견한건 저게다에요
    각서버에 error_log 확인해보세요.
  • ?
    감사합니다~^^
  • profile

    break이 아래로 몇군데 더 있던데, 그러면 다른 것도 다 삭제해도 되는지요?

    캡처.PNG

  • profile profile
    while 안에 break;는 바꾸시면 안되요
  • profile profile
    네. 감사합니다.
  • profile
    좋은 글 감사합니다~
  • profile
    감사합니다. 오류나던게 덕분에 잘 돌아갑니다. 감사합니다!
  • profile

    break; 이거 설명대로 변경했는데요... 메뉴 새로 만들기 하면 오류가 납니다.
    라이믹스 1.9.9.9 php7.1입니다.

    정상적으로 잘 되시는 분들 모듈 공유 부탁드려도 될런지요?