PHP Notice: Undefined index: HTTP_REFERER 문제
PHP 코드를 개발하다보면 PHP 코드상의 에러 메세지나 웹 서버의 에러 로그를 확인하면서 다음과 같은 내용이 기록되어 있는 경우가 있습니다.
2018/10/27 23:02:37 [error] 503#0: *2708 FastCGI sent in stderr: "PHP message: PHP Notice: Undefined index: HTTP_REFERER in /home/nginx/public_html/index.html on line 58" while reading response header from upstream, client: 192.168.xxx.xxx, server: mydomain.com, request: "GET /index.html HTTP/2.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "mydomain.com"
정의되지 않은 인덱스라고 해석할 수 있는 이 에러는 해당 페이지에서 확인해보려 해도 특별한 문제가 없는 경우가 많습니다.
어떤 이유로 위 에러 메세지가 표시되는 것일까요?
해결 방법
이는 현재 로드된 웹페이지에서 PHP의 특정 환경변수의 값이 존재하지 않아 발생하는 문제입니다.
다음 에러 내용에서 확인할 수 있듯이 HTTP_REFERER
변수에서 문제가 발생한 것으로 의심됩니다.
Undefined index: HTTP_REFERER
이제 해당 코드를 수정해보도록 하겠습니다.
PHP 코드 내에서 $_SERVER['HTTP_REFERER']
를 사용한 부분을 찾습니다. 아래 예시에서는 echo
를 사용하여 환경변수를 사용했습니다.
echo "HTTP REFERER : " . $_SERVER['HTTP_REFERER'];
이제 이 부분에 변수 값이 존재하는지 확인하는 코드를 추가해줍니다. isset()
함수를 사용하면 해당 변수의 값이 존재하는지 확인하여 만약 존재하지 않을 경우 false
를 반환하게 됩니다.
if (isset($_SERVER['HTTP_REFERER'])) { ... echo "HTTP REFERER : " . $_SERVER['HTTP_REFERER']; ... }
이렇게 코드를 수정하면 더 이상 에러 로그에 메세지가 나타나지 않을 것입니다.
에러 메세지를 끄기
사실 이러한 에러는 중요성이 낮은 알림 메세지에 가깝습니다.
만약 PHP의 에러 메세지를 완전히 끄고 싶다면 다음 포스트를 참고해보세요.
감사합니다
도움되셨다니 기쁘네요!