2015-02-27
프로그램을 짤때 에러가 표시된다면 해당 에러를 보고 문제를 해결할 수 있다.
하지만 에러조차 뜨지 않고 그냥 빈화면만 뜨면, 대체 어디서 문제가 발생 했는지 알수가 없어서 프로그램 전체를 하나하나 짚어봐야 하는 일이 생긴다.

특히 CI에서는 이런경우가 종종 있는데, 이글은 필자가 겪어본 빈화면 관련 사항을 토대로 작성한 글이다.

우선 서버 설정에 에러 표시가 안되어 있을수 있다. 이런 경우라면 php.ini파일이나 ini_set 함수를 이용해서 에러 표시 설정을 바꾸면 된다.

하지만, 이런 기본적인 사항들이 전부 되어 있는데도 빈화면만 뜨는 경우가 있다.
필자가 겪은 경우는 mysql접속 에러 때문이었다.

CI의 mysql 접속 관련 소스들을 보면, mysql_connect()가 이루어지는 함수에 앞에 @가 있다.
function db_connect()
{
	if ($this->port != '')
	{
		$this->hostname .= ':'.$this->port;
	}
	return @mysql_connect($this->hostname, $this->username, $this->password, TRUE);
}
함수 앞에 @를 쓰게 되면 오류가 떠도 아무런 오류문구를 표시하지 않는다. mysql연결은 실패하는 사례가 많기 때문에 이런식으로 처리해 놓으걸 텐데.. 문제는.. mysql_connect 함수 자체가 없을때이다. mysql_connect함수는 기본함수로 알고 있는 경우가 많은데 사실 그렇지 않다.

즉, 해당 함수가 없다면, @로 인해서 오류 문구는 안뜨지만, 함수가 없는에러는 치명적인 오류이고...
결국 치명적인 오류로 실행은 안되는데, 화면에는 아무것도 안뜨는 상태가 되는 것이다.

좀더 확실히 말해주자면, phpinfo()를 했을때 --without-mysql이라는 구문이 보이는 경우가 이런 경우이다.

뭐 여기까지 알아냈다면, 서버로 가서 php-mysql을 설치해주면 되지만, 이렇게 알아내기 까지는 소스를 하나하나 파해쳐 나가면서 echo를 찍어내는 수밖에 없어서.. 꾀나 고생좀 하게 된다.