날씨 위젯이 최근들어 대기품질 api 값을 공란이나 null로 출력하는 일이 자주 발생하고 있습니다.

저희만 그런것이 아니고 다른 사이트도 그렇더라구요.

 

저희 서버에 로그를 보니 

 

Undefined index: HTTP_REFERER in /public_html/widgets/pr_weather_v2/getWeath er.php on line 2

 

이런 내용이 있습니다.

 

<?php
if(!preg_match('/'.$_SERVER['HTTP_HOST'].'/', $_SERVER['HTTP_REFERER'])) // 여기가 2번째 라인 같은데요...
{
    print json_encode(array('success' => false, 'data' => 'ERROR_REFERER'));
    die();
}

 

 

 

 

 

 

 

  • profile

    에러는 아니고, 리퍼러가 없는데 리퍼러를 불러오려고 하니 알림이 뜨는 것입니다.

    XE에서는 E_NOTICE를 무시하도록 되어 있어서 이런 알림이 보이지 않지만,

    저렇게 XE를 통하지 않고 직접 실행되는 파일이라면 알림이 무시되지 않으니 로그에 남지요.

  • profile profile
    네. 에러는 아니더라구요. 그럼 그냥 무시해도 되는건가 보네요. 그나저나 그럼 왜 최근들어 api가 이상하게 출력되는지 원인을 찾아보려해도 어렵네요.
  • profile profile
    동일한 api를 사용하는 여러 사이트에 동시에 문제가 생겼다면 api를 제공하는 쪽에서 서비스를 중단했거나 뭔가 변경했을 가능성이 큽니다.
  • profile

    다른 사이트에서 긁어가지 못하도록 리퍼러 체크를 하는 것 같습니다.

    그런데 해당 주소를 브라우저 주소창에 넣고 직접 접속하면 리퍼러가 없으니까

    저 부분에서 일단 E_NOTICE가 뜨고, if문이 참이 되어 에러메시지 출력 및 die()로 넘어가게 됩니다.

  • profile profile
    위젯에서 캐시가 만료되면 api에 접속하게 되어있습니다. 위젯에서 실행된게 아니고 누군가 getWeath er.php 를 브라우저에서 실행했다는 것인가요?
  • profile profile
    누군가가 개발자도구로 테스트를 하다가 리퍼러 없는 요청이 발생했을 수도 있고, 위젯에 문제가 있어서 잘못된 요청이 발생했을 수도 있고, 구글 같은 검색 엔진이 건드렸을 수도 있어요. 리퍼러 변수가 항상 존재한다는 보장은 없습니다.
  • profile profile
    근데 최근 값을 공란으로 출력하거나 혹은 null로 출력할때와 관련이 있어 보여서요.
  • profile profile

    null로 출력되는 시점에 정확히 어떤 형식의 데이터를 받았는지 개발자도구로 찾아본 후, getWeather.php 소스를 뜯어보면서 그런 형식의 데이터를 뿌려주는 조건이 어디 있는지 찾아야지요. 외부 api와 연동하는 프로그램들 대부분이 api 접속에 실패하거나 api에서 예상 밖의 에러를 반환하면 제대로 대응하지 못하고 이상한 값을 뿌려버리곤 합니다.

  • profile profile
    네. 최근에 갑자기 해당 api에서 값을 제대로 못가져오거나 혹은 캐시가 이상하게 작동하는 듯합니다. 캐시가 만료되는 시간에 다시 api에서 값을 가져온다음 캐시의 값을 바꾸는 것 같은데요. 캐시동작이 이상하거나 혹은 api에서 받을때 이상하게 받을 것 같은데 그냥 추측만 하고 있네요.