서버 이전한 뒤 이 현상 때문에 스트레스가 이만 저만이 아니였다.
https://browscap.org/ 에서 최신 버전으로 업데이트 해보아도 소용이 없었고, php 버전에 따라 분기하여 parse_ini_file("경로/php_browscap.ini",true, INI_SCANNER_RAW); 을 사용하는 방법도 썼지만 별다른 효과가 없었다.
이런 저런 연구를 한 끝에 해결 방법을 찾은 것 같다 (1주 동안 아직까지 에러 노출이 없다.)
문제가 되었던 것은 ; 이 세미콜론이다. 제공받은 php_browscap.ini 파일 안에는 ;가 엄청 많이 있다. [ ] 이 괄호 안에 ; (세미콜론) 들이 있는데 이 앞에 \표시를 해주어야 오류가 안난다.
문제는 일괄 처리하기엔 에디터들이 오류가 날 것이다. (물론 가능하다면 [ ] 이 괄호 안의 ; (세미콜론)앞에 \를 붙여주어 \;으로 만들어주면 된다.)
난 좀 번거롭지만 아래와 같은 순서로 했다.
$brows = parse_ini_file("경로/php_browscap.ini",true);
기존에는 이렇게 파일을 불러오기만 했는데 아래처럼 변경했다.
$browsecap = file('경로/php_browscap.ini'); foreach( $browsecap as &$row ) if ( $row[ 0 ] == '[' ) $row = str_replace( ';', '\;', $row ); file_put_contents( '경로/saveas_browscap.ini', $browsecap ); $brows = parse_ini_file("경로/saveas_browscap.ini",true);
이렇게 한 뒤 사이트에 접속하고 ftp로 해당 경로를 보면 saveas_browscap.ini 가 만들어져 있다.
그러면 위에 변환시키는 코드를 다시 주석처리 해준다.
//$browsecap = file('경로/php_browscap.ini'); //foreach( $browsecap as &$row ) // if ( $row[ 0 ] == '[' ) // $row = str_replace( ';', '\;', $row ); //file_put_contents( '경로/saveas_browscap.ini', $browsecap ); $brows = parse_ini_file("경로/saveas_browscap.ini",true);
이렇게 해주는 이유는 매 접속자들이 접속할 때마다 파일을 변환하여 생성하니 메모리 에러가 나서 접속이 안되는 경우가 있었다.
무튼 위 처럼 새로 변환되어져 만들어진 파일을 불러와 사용하니 이상없이 구동되었다.