CI 묻고 답하기

제목 웹호스팅 올린후 DB연결이 안되요.
글쓴이 해머 작성시각 2010/06/14 11:14:14
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 35000   RSS


로컬개발서버에서 개발 완료 후
호스팅서버에 올려 놓고 실행하니
아래와 같은 에러가 발생합니다.

실제URL : http://www.hspartners.kr/

Fatal error: Call to a member function on a non-object in /www/hspartners_kr/system/application/controllers/main.php on line 36

SQL문을 실행하는 부분에서 에러가 발생하는데....

어디를 확인해 봐야 하는지... 모르겠습니다.

$db['default']['pconnect'] = FALSE; 로도 설정해도 안되고..
phpinfo();를 찍어보면 mysql은 로딩되는 것 같습니다.


호스팅 업체에 문의 하니...테이블생성이나,DB접속ID/pwd, 데이터 베이스 설정등은 문제가 없다고 합니다.

정말 급합니다.... 아시는분 답변 부탁드립겠습니다.


=> 실제 컨트롤러에서 에러나는 부분
$data['rs_bb_post'] = $this->Bb_post_model->list_bb_post($params); // SQL실행

 

[database.php]
$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "121.254.168.75";
$db['default']['username'] = "hspartners";
$db['default']['password'] = "**********";
$db['default']['database'] = "dbhspartners";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

첨부파일 phpinfo.zip (1.9 MB)
 다음글 Twitter라이브러리의 결과값을 자바스크립트에서 사용... (2)
 이전글 [초보]모듈 윗 디랙토리에 관하여 (1)

댓글

변종원(웅파) / 2010/06/14 11:27:41 / 추천 0
웹호스팅 업체에서는 보안때문에  hostname을 localhost만 제공하는 곳이 많습니다.
가입시 웹호스팅업체에서 보내주는 안내문서에 hostname 나와있을텐데요? 

가비아 확인해보니 localhost만 지원합니다. 아이피를 localhost로 바꾸시면 됩니다.
mycastor / 2010/06/14 11:44:15 / 추천 0
mySQL 사용자 설정 부분에서 localhost만 허용한것 같구요..

DB서버가 별도 외부에 있는 경우에도 mySQL사용자에게

외부 접속 권한을 주셔야 합니다.

PHP나 CI 설정 문제가 아닐꺼예요~
kirrie / 2010/06/14 12:50:24 / 추천 0
에러 메세지에 다 나와 있는데요;;

Call to a member function on a non-object

인스턴화된 오브젝트가 아닌 일반 변수에서 멤버 함수를 사용한다, 즉, Bb_post_model 라는 모델이 제대로 로딩되지 않은 것으로 보입니다.
해머 / 2010/06/14 14:20:36 / 추천 0

웅파님 말대로 아이피를 localhost로 해도 안되고
 mycaster님 말씀대로 가비아에 문의해봤더니 외부접속권한 되어있다고 하구요...
kirrie 님 말씀처럼 로딩이 안되는 거면...
다른 방식으로는 어떻게 로딩을 해야 하는 지요 -_-;;
 

변종원(웅파) / 2010/06/14 14:45:31 / 추천 0
테스트 컨트롤러 하나 만드셔서 active record로 간단한 쿼리 실행해보세요. 
그럼 뭐가 문제인지 알 수 있을것 같네요.
kirrie님 말씀은 $this->load->model('Bb_post_model'); 이라는 구문으로 모델 로딩이 됐는지 물어보시는겁니다.

그리고 로컬에서 테스트후 이상이 없었다는 전제하에서 말씀드린건데 대소문자도 한번 보시기 바랍니다.
윈도우서버에서는 대소문자 구분 없습니다.

로그를 남길 수 있게 config.php 수정하고 system/log 의 내용도 보시기 바랍니다.
kirrie / 2010/06/14 14:46:53 / 추천 0
만약에 디비 연결에 문제가 있다면 윗단에서 다른 에러가 먼저 났을텐데, 그게 아니라 단순하게 저런 에러가 났다면... 로컬에서는 잘됐는데 호스팅 계정에 업로드 후 동작을 하지 않는다고 하시니 좀 애매모호하긴 하네요.

일반적으로 모델 로딩이 $this->load->model('모델명'); 으로 되어 있을텐데 그 부분을 살펴보시는게 좋을 것 같습니다. 로컬이라면 아마 윈도우즈에서 작업하셨을텐데, 윈도우즈는 파일의 대소문자를 구분하지 않지만 리눅스는 구분합니다.

혹 Bb_post_model 클래스명이 소문자로만 되어 있다거나 하진 않나요? $this->load->model('모델명')과 파일명, 그리고 클래스명이 모두 일치하도록 수정해보세요.
케이든 / 2010/06/14 14:50:44 / 추천 0
웅파님 kirrie님 댓글에 한표!
해머 / 2010/06/14 15:36:11 / 추천 0

"$this->load->model('모델명')과 파일명, 그리고 클래스명이 모두 일치하도록 수정해보세요."
kirrie님 말대로 모두 일치 시켜 보았습니다.
파일명을 [bb_post_model.php] => [Bb_post_model.php] 로 변경했습니다.
그래도 안되는데...

혹시 'controller/Bb_post_model'대신 'controller/bb/Bb_post_model'로
업무별 경로를 추가했는데  이게 문제가 될수 있나요?


-------------------------------------------------
원래설정
-------------------------------------------------
[/bb/bb_post_model.php]

<?
class Bb_post_model extends Model {


[main.php]
function __construct()
{
 parent::Controller();
 $this->load->model('/quick_req/Quick_req_model'); // 모델 로드
 $this->load->model('/bb/Bb_post_model'); // 모델 로드
}

-------------------------------------------------
바꾼설정
-------------------------------------------------
[/bb/Bb_post_model.php] <== 파일 이름을 대문자로 변경

<?
class Bb_post_model extends Model {


[main.php]
function __construct()
{
 parent::Controller();
 $this->load->model('/quick_req/Quick_req_model'); // 모델 로드
 $this->load->model('/bb/Bb_post_model'); // 모델 로드
}
 

변종원(웅파) / 2010/06/14 15:51:33 / 추천 0
헷갈리니까 ci권고안대로 가시죠.

파일명은 전부 소문자로
클래스명은 첫글자만 대문자로

그리고 가비아 php5 설치되어 있는거 맞는거죠?

모델 하위폴더는 상관이 없습니다. 스펠링만 맞으면 됩니다.

에고... 다시 보니 틀리셨네요.

 $this->load->model('/bb/Bb_post_model'); // 모델 로드 <- 바꾸기전 모델로딩부분
파일명이 bb.post_model.php 면  $this->load->model('/bb/bb_post_model'); 로 하셔야 합니다.
클래스명과 생성자만 첫글자 대문자로 해야하구요.
매뉴얼 권고안 읽어보시면 왜 그렇게 써놨고 매뉴얼을 읽어보라고 하시는지 알겁니다.

http://codeigniter-kr.org/user_guide/general/styleguide.html

kirrie / 2010/06/14 16:27:12 / 추천 0
경로 앞에 / 붙이시면 안됩니다.
해머 / 2010/06/14 20:43:10 / 추천 0

파일 이름 : bb_post_model.php
(클래스명/생성자 : Bb_post_model/Bb_post_model )

모델 로드 : $this->load->model('/bb/bb_post_model'); // 모델 로드
모델 호출 : $this->bb_post_model->list_($params); 

클래스명 과 생성자 명만 대문자"클래스명/생성자"하니까 되는 군요..

웅파님, kirrie , mycastor 답변감사합니다.

그리고, "경로 앞에 / 붙이시면 안됩니다." => 제가 이상한가요.. / 붙여도 되네요.. ^^a;;