본문 바로가기
WEB HACKING/웹 해킹[실습]

Php로 웹 개발하기 : 로그인(2) - MySQL 연동 Error

by madevth 2021. 10. 17.
반응형

이전 글 : [모의해킹_실습] - Php로 웹 개발하기 : 로그인 페이지 만들기(1) - 기초 Setting

 

앞선 포스팅에서 php 로그인 페이지를 만들 때 MySQL의 권한 문제와 Php와 MySQL이 연동이 잘 안되는 문제가 생길 수 있다. (나야 나) 폭풍 구글링을 통해 문제를 해결할 수 있었는데, 한번 살펴보자.

 

① MySQL 권한 문제

우선 sudo를 붙여야만 mysql 로그인이 가능한 문제가 있었다.

root 사용자는 sudo를 붙여야 하는 접속 방식 자체를 바꾸든지, 새로운 사용자를 만들어준 후 연동할 데이터베이스에 권한을 주든지 둘 중에 하나를 선택하면 된다. 우리는 후자를 살펴보자.

mysql > use mysql;
mysql > CREATE user 'userid'@'localhost' identified by 'userpw';
mysql > GRANT ALL PRIVILEGES in *.* to 'userid'@'localhost' identified by 'userpw';
mysql > FLUSH PPRIVILEGES;

mysql > SHOW GRANTS for 'userid'@'localhost'; // 권한 확인
mysql > REVOKE all on *.* from 'userid'@'localhost'; // 권한 삭제

위처럼 한 사용자를 생성해서 그 사용자에게 권한을 주면, 그 사용자로 sudo 없이 로그인 가능하다.

 

② php.init 파일 수정

php와 MySQL 연동에 문제가 있었는데, 1) 에러 메시지가 안 뜬다. 2) mysqli_connect() 함수를 사용할 수 없다. 이 두 가지 문제가 차례로 생겼다. 둘 다 php.init 파일을 수정함으로써 해결할 수 있었다.

 

우선, 분명히 연동에 문제가 생겼는데... mysqli_connect_error() 함수를 사용해도 에러 메시지가 안 떠서 뭐가 문제인지를 알 수 없었다.

$ find / -name php.init 2>/dev/null

위의 코드로 php.init 파일을 찾아준다. (위의 코드는 간략히 설명하자면 'php.init이라는 이름을 가진 파일을 찾아줘, error message들은 전부 휴지통으로~'의 뜻이다.)

나 같은 경우는 php.init 파일이 두 개 나왔는데, 그중에 apache2/php.init을 수정해 주었다.

 

php.init 파일에서 display_errors = Off로 되어있다면, 이를 display_errors = On으로 고쳐주자. 그 후 서버를 껐다가 키면 에러 메시지가 출력 된다.

 

에러 메시지를 살펴보니, Undefined된 함수 mysqli_connect()를 부르려 했다는 에러가 출력되었다. 이 역시 php.init 파일을 수정하면 된다. 버전에 따라 조금 다른 것 같은데, 나는 ;extension=mysqli의 주석(;)을 해제해 주었다.

마찬가지로 서버를 껐다가 키니 제대로 연동이 되었다! (감격)

 

에러 메시지는 싫지만 에러가 있는데 에러 메시지가 안 뜨는 게 얼마나 더 무서운 것인지 느꼈다.

반응형

댓글