질문 Q #10838
load library가 안될 때 무얼 살펴야 하나요?
letsgolee 2013-09-26 18:14:52
 안녕하세요.

코드이그나이터 배우길 시작한지 2달이 되갑니다. 이걸로 사무실에서 사용할 프로그램 제작 중인데 거기에 tank_auth가 로딩이 안되서 에러가 납니다. 문제는 앞부분이 동일한 다른 소스에서는 열리고 있다는 점입니다. 다음이 그 소스입니다.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Worklog extends CI_Controller {
 function __construct()
 {
  parent::__construct();

  $this->load->library('session');
             $this->load->helper('url');
             $this->load->model('worklog_model');
             $this->load->library('tank_auth');
  $this->lang->load('tank_auth');
 }

 public function index()
 {
  return $this->view_calendar();
 }

 public function view_calendar($year = NULL, $month = NULL)
 {
  if (!$this->tank_auth->is_logged_in()) redirect(site_url('auth/'));
                ...
에러가 다음과 같이 나옵니다:
A PHP Error was encountered

Severity: Notice

Message: Undefined property: Worklog::$tank_auth

Filename: controllers/worklog.php

Line Number: 22


전에 세션이 동일 증상이어서 그냥 autoload에 등록을 해서 처리했는데 이것도 그런식으로 외에는 처리가 되지 않을까요? 

이와 비슷한 경험이 있으신 분들 조언을 부탁합니다.
답변 8
#1 변종원(웅파) 2013-09-27 00:41:34
ci log level 4로 찍어서 보세요. 중복호출되는지 등등..
#2 letsgolee 2013-09-27 08:24:30
저도 확인해 보았는데  tank_auth의 config와 language는 잘 올라옵니다. 그리고 _construct에 로그 메시지를 넣어보았더니 initialize는 되네요. 그런데 에러는 동일합니다.
#3 milosz 2013-09-27 09:36:36
 profiler 결과도 올려주시면 참고가 될 것 같네요.
#4 letsgolee 2013-09-27 10:04:14
코어 파일들을 수정하여 로그 메시지를 넣도록 해서 테스트해보았는데 모든 게 정상적으로 tank_auth 변수도 생성이 되네요... 다음이 로그 일부입니다.

DEBUG - 2013-09-27 03:01:41 --> Library 'tank_auth' is loading...
DEBUG - 2013-09-27 03:01:41 --> ci_load_class: 'tank_auth' is loading...
DEBUG - 2013-09-27 03:01:41 --> ci_init_class: 'tank_auth' is creating...
DEBUG - 2013-09-27 03:01:41 --> ci_init_class: class name is 'Tank_auth'...
DEBUG - 2013-09-27 03:01:41 --> Config file loaded: application/config/tank_auth.php
DEBUG - 2013-09-27 03:01:41 --> Library 'session' is loading...
DEBUG - 2013-09-27 03:01:41 --> ci_load_class: 'session' is loading...
DEBUG - 2013-09-27 03:01:41 --> ci_init_class: 'session' is creating...
DEBUG - 2013-09-27 03:01:41 --> ci_init_class: class name is 'MY_Session'...
DEBUG - 2013-09-27 03:01:41 --> Session Class Initialized
DEBUG - 2013-09-27 03:01:41 --> Session routines successfully run
DEBUG - 2013-09-27 03:01:41 --> Model Class Initialized
DEBUG - 2013-09-27 03:01:41 --> Helper loaded: cookie_helper
DEBUG - 2013-09-27 03:01:41 --> Tank_auth Class Initialized
DEBUG - 2013-09-27 03:01:41 --> Language file loaded: language/english/tank_auth_lang.php
ERROR - 2013-09-27 03:01:41 --> Severity: Notice  --> Undefined property: Worklog::$tank_auth C:\public\htdocs\minolta\application\controllers\worklog.php 17
로그를 보면 정상적으로 ci_init_class()에 의해 변수 이름 tank_auth가 생성이 됬습니다. 따라서 적어도 tank_auth는 object가 되어야 하나 var_dump($this->tank_auth)를 찍으니 NULL값이 나옵니다.... 미친 거같아요.
#5 변종원(웅파) 2013-09-27 10:12:55
전에도 비슷한 사례가 딱 하나 있었습니다.

모든게 정상적인데 특정 부분만 안되는....

ci파일 다시 받아서 올려보세요. tank_auth도요. 


(저도 어제 좀 고생한게 하나 있었는데 컨트롤러명을 lib_test로 만들었는데 처음엔 잘 실행이 됐는데
어느 순간부터 404에러가 나더군요. index.php 넣어주면 안나고 library_test로 해도 에러가 나고
test_lib로 하면 안나고요. ㅋㅋ)
#6 letsgolee 2013-09-27 10:20:40
코어 파일의 Loader class의  ci_init_class() 내부에서 var_dump($CI->$classvar)를 찍을 때는 정상적으로 나옵니다.
또한 $this->load->_ci_classes안에도 tank_auth는 정상적으로 등록되었네요. 결국 $CI가 문제인듯. 다른 것은 잘 연계가 되는데 왜 tank_auth만 문제인지...
#7 letsgolee 2013-09-27 17:17:49
 해결했습니다!!!
 
원인은 딴데 있었습니다. $this->load->library('tank_auth');를 하기 전 $this->load->model('worklog_model');이 있는데 여기에 문제가 있었습니다. 만들면서 카피/페이스트 작업을 했더니 엉뚱한데서 페이스트를 해서 Worklog_model extends CI_Controller가 되었네요.

그런데 tank_auth붙이기 전에는 잘 작동을 해서 전혀 문제를 발견하지 못하고 있다가 이번에 tank_auth가 제대로 붙지 않는 이유가 혹시 앞뒤로 문제가 있을 것 같은 생각이 들어 소스를 일일이 확인하다 발견하고 제대로 extends CI_Model로 바꾸니 잘 됩니다.
 
여러모로 답글 주신분들 감사합니다!!!
 
#8 변종원(웅파) 2013-09-27 18:07:54
해결되서 다행이네요. ^^