PHP 7.3이 사용 가능하다는 공지가 와서, 기존의 7.0을 7.3으로 올렸더니 IZ*ONE Private Mail 통계의 질문 검색이 되지 않았다. Console 로그를 보니 아래와 동일한 Warning이 엄청나게 많이 발생하여 Bootstrap Table이 JSON 데이터로 인지를 못하고 있었다.


Warning
: Use of undefined constant mails – assumed ‘mails’ (this will throw an Error in a future version of PHP) in
/home/junklab/public_html/izone/search.php
on line
291


Warning 발생 이유는 간단했다. $_POST[mails]와 같이 배열의 key 값이 문자열(string)인데도 따옴표 없이 썼다는 것. 해결 방법은 문자열에 따옴표를 붙이는 것이다. $_POST[‘mails’] 처럼 작은따옴표를 써도 되고, $_POST[“mails”] 처럼 큰따옴표를 써도 된다. 배열 뿐 아니라 미리 선언(define)된 상수(constant)가 아닌 문자열에는 반드시 따옴표를 붙여야 한다. 숫자나 변수는 관계 없다.

https://www.php.net/manual/en/language.types.array.php#language.types.array.foo-bar 링크에, 왜 따옴표가 없는 것이 문제인지, 왜 PHP 버전 업 후 갑자기 오류가 발생하는지 잘 나와 있다. PHP 7.2.0 이전에는 미리 선언되지 않은 상수(Constant)가 호출되면, PHP가 자동으로 단순 문자열로 변경을 해주었지만, PHP 7.2.0부터는 더이상 변경을 해주지 않는다고 한다. 그리고, 이전 버전에서는 Warning이 아닌 Notice로 에러표시를 했기 때문에, 일반적인 환경에서는 문제가 있는지도 확인이 안되었던 것 같다. stackoverflow에는 2010년에도 이미 이 문제에 대한 질문이 있다.<링크>

실제로는 Warning 메시지만 안나오게 설정해봐도, 동작 자체는 문제가 없었다. 아직까지는 문자열로 자동 변경을 해주는 것으로 보인다. 그렇다고 Warning 메시지를 계속 안나오게 할 수는 없고, 문자열로 된 배열 KEY에 모두 작은따옴표를 넣어 주었다. 수정을 하면서 보니, 큰따옴표/작은따옴표/따옴표 없음이 무작위로 혼합된 혼종이 존재하고 있었다. 이제 부터라도 작은따옴표를 쓰는 것으로 습관을 들이기로 했다.