날씨 위젯이 최근들어 대기품질 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();
}
댓글 9
에러는 아니고, 리퍼러가 없는데 리퍼러를 불러오려고 하니 알림이 뜨는 것입니다.
XE에서는 E_NOTICE를 무시하도록 되어 있어서 이런 알림이 보이지 않지만,
저렇게 XE를 통하지 않고 직접 실행되는 파일이라면 알림이 무시되지 않으니 로그에 남지요.
다른 사이트에서 긁어가지 못하도록 리퍼러 체크를 하는 것 같습니다.
그런데 해당 주소를 브라우저 주소창에 넣고 직접 접속하면 리퍼러가 없으니까
저 부분에서 일단 E_NOTICE가 뜨고, if문이 참이 되어 에러메시지 출력 및 die()로 넘어가게 됩니다.
null로 출력되는 시점에 정확히 어떤 형식의 데이터를 받았는지 개발자도구로 찾아본 후, getWeather.php 소스를 뜯어보면서 그런 형식의 데이터를 뿌려주는 조건이 어디 있는지 찾아야지요. 외부 api와 연동하는 프로그램들 대부분이 api 접속에 실패하거나 api에서 예상 밖의 에러를 반환하면 제대로 대응하지 못하고 이상한 값을 뿌려버리곤 합니다.