php - Browscap.ini 사용시 php 5에서 syntax 에러 발생시

서버 이전한 뒤 이 현상 때문에 스트레스가 이만 저만이 아니였다.
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);

이렇게 해주는 이유는 매 접속자들이 접속할 때마다 파일을 변환하여 생성하니 메모리 에러가 나서 접속이 안되는 경우가 있었다.

무튼 위 처럼 새로 변환되어져 만들어진 파일을 불러와 사용하니 이상없이 구동되었다.

Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

0 댓글
Inline Feedbacks
View all comments
TOP