만들면서 배우는 CodeIgniter Q&A

제목 300페이지 sns프로젝트 질문입니다.
글쓴이 책상다리 작성시각 2013/11/06 11:15:51
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 10501   RSS
 게시판 만들기 끝내고, sns프로젝트로 넘어왔는데요.
업로드 기능 만들기에서, controlls.php 와  sns_m.php, upload_photo_v.php만들어서 사진 업로드하고 쓰기 부분 만들어 주려고 하고 있습니다.
그런데 책 313페이지에서 보면 localhost/sns/controlls 로 접속해서 로그인 후에 쓰기화면 접속이라고 나와있는데요.
controlls.php쪽 소스를 보면 로그인 되있지 않을경우 document.location = '/sns/auth/login/' 이쪽으로 넘어가게 되어있는데요.
위의 주소를 치면 로그인 후 작성하세요 애러 메세지 발생 후 404 page not found 가 뜹니다;;;
localhost/sns/auth/login/ 주소는 이렇구요..

C:\xampp\htdocs\sns\application\views\ 이 경로 안에 헤더와 풋터 넣어놨구요.
C:\xampp\htdocs\sns\application\views\auth 이 경로 안에 login_v.php 파일 있습니다. 

아래에 controlls.php 첨부하겠습니다. 
어제부터 이것저것 바꿔보고 하는데도 해결이 안되네요 ㅠ
부탁드립니다 ㅠ
아 index.php 는 .htaccess 와 컨피그 파일 수정으로 정상적으로 생략가능하게 되있습니다.



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

class Controlls extends CI_Controller {
  function __construct()
  {
   parent::__construct();
   $this->load->model('sns_m');
   $this->load->helper(array('form','date','url'));
   $this->load->database();
   $this->load->library('session');
   echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
  }

 public function _remap($method)
 {
  $this->load->view('header_V');

  if( method_exists($this, $method) )
  {
   $this->{"{$method}"}();
  }

  $this->load->view('footer_v');
 } 

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

 function upload_photo()
 {
  if(@$this->session->userdata['logged_in'] == TRUE )
  {
   //폼 검증 라이브러리 로드
   $this->load->library('form_validation');

   //폼 검증할 필드와 규칙 사전 정의
   $this->form_validation->set_rules('subject','제목','required');
   $this->form_validation->set_rules('contents','내용','required');

   if( $this->form_validation->run() == FALSE )
   {
    $this->load->view('upload_photo_v');
   }
   else
   {
    $config = array(
     'upload_path' => 'uploads/',
     'allowed_types' => 'gif|jpg|png',
     'encrypt_name' => TRUE,
     'max_size' => '1000'
     );

    $this->load->library('upload',$config);

    if(!$this->upload->do_upload())
    {
     $data['error'] = $this->upload->display_errors();

     $this->load->view('upload_photo_v',$data); 
    }
    else
    {
     $upload_data = $this->upload->data(); 

     $upload_data['subject'] = $this->input->post('subject',true);
     $upload_data['contents'] = $this->input->post('contents',true);
     $upload_data['user_id'] = $this->session->userdata[('username')]; 

     $result = $this->sns_m->insert_sns($upload_data); 

     redirect('/controlls/lists'); exit; 

     //페이스북 전송
     if($result)
     {
      //sns 라이브러리 로드
      $this->load->library('sns');
      $this->facebook = $this->sns->facebook();
      $this->facebook->setCallback(site_url('upload_photo/facebook_upload/'.$result));

      if(!$this->facebook->isLoggedIn())
      {
       $this->facebook->login();
      }
     }
     else
     {
      echo "<script> alert('입력실패했습니다.');</script>";
      redirect('/controlls/upload_photo');
     }
 
    }
   }
  }
  else
  {
   echo "<script>alert('로그인 후 작성하세요');
   document.location = '/sns/auth/login/';
   </script>";
   exit;
  }
 }
 
 function facebook_upload()
 {
  //글 정보 가져오기
  $id = $this->uri->segment(3);
  $result = $this->sns_m->get_sns($id);
  //앨범 업로드
  $this->facebook->uploadPhoto($result['contents'], $result['file_path'].$result['file_name'],'');
  redirect('/cotrolls/lists');
 }
 
 function lists()
 {
  //검색어 초기화
  $search_word = '';
 
  //주소중에서 q(검색어) 세그먼트가 있는지 검사하기 위해 주소를 배열로 변환
  $uri_array = array_values($this->uri->segment_array());
 
  if( in_array('q', $uri_array) ) {
   //주소에 검색어가 있을 경우의 처리. 즉 검색시
   $search_word = urldecode($this->url_explode($uri_array, 'q'));
  }
 
  $data['list'] = $this->sns_m->get_sns_list('sns_files', '', 0, 6, $search_word);
 
  if( BROWSER_TYPE == 'M' )
  {
   $this->load->view('mobile_lists_v', $data);
  }
  else
  {
   $this->load->view('lists_v', $data);
  }
 }
 
 /**
  * sns 보기
  */
 function view()
 {
  $id = $this->uri->segment(3);
 
   //게시물 가져오기
   $data['views'] = $this->sns_m->get_view($id);
 
  //댓글 리스트 가져오기
  $data['comment_list'] = $this->sns_m->get_comment($id);
 
  //view 호출
  if( BROWSER_TYPE == 'M' )
  {
   $this->load->view('mobile_view_v', $data);
  }
  else
  {
   $this->load->view('view_v', $data);
  }
 }
 
 /**
  * 게시물 삭제
  */
 function delete()
 {
  //경고창 헬퍼 로딩
   $this->load->helper('alert');
 
  if( @$this->session->userdata('logged_in') == TRUE )
  {
   //삭제하려는 글의 작성자가 본인인지 검증
   $board_id = $this->uri->segment(3);
 
   $writer_id = $this->sns_m->writer_check($board_id);
 
   if( $writer_id->user_id != $this->session->userdata('username') )
   {
    alert('본인이 작성한 글이 아닙니다.', '/sns/controlls/view/'.$this->uri->segment(3).'/page/'.$this->uri->segment(5));
    exit;
   }
 
   //게시물 번호에 해당하는 게시물 삭제
   $return = $this->sns_m->delete_content($this->uri->segment(3));
 
   //게시물 목록으로 돌아가기
   if ( $return )
   {
    //삭제가 성공한 경우
    alert('삭제되었습니다.', '/sns/controlls/lists/page/'.$this->uri->segment(5));
    exit;
   }
   else
   {
    //삭제가 실패한 경우
    alert('삭제 실패하였습니다.', '/sns/controlls/view/'.$this->uri->segment(3).'/page/'.$this->uri->segment(5));
    exit;
   }
  }
  else
  {
   alert('로그인후 삭제하세요', '/sns/auth/login/');
   exit;
  }
  }
 
  function modify_photo()
  {
   //경고창 헬퍼 로딩
   $this->load->helper('alert');
 
   //주소 중에서 page 세그먼트가 있는지 검사하기 위해 주소를 배열로 변환
   $uri_array = array_values($this->uri->segment_array());
 
   if( in_array('page',$uri_array) )
   {
    $pages = urldecode($this->url_explode($uri_array, 'page'));
   }
   else
   {
    $pages = 1;
   }
 
   if( @$this->session->userdata('logged_in') == TRUE )
   {
    $id = $this->uri->segment(3);
 
    //수정하려는 글의 작성자가 본인인지 검증
    $writer_id = $this->sns_m->writer_check($id);
 
    if( $writer_id->user_id != $this->session->userdata('username') )
    {
     alert('본인이 작성한 글이 아닙니다.','/sns/controlls/view/'.$id.'/page/'.$pages);
     exit;
    }
 
    //폼 검증 라이브러리 로드
    $this->load->library('form_validation');
 
    //폼 검증할 필드와 규칙 사전 정의
    $this->form_validation->set_rules('subject','제목','required');
    $this->form_validation->set_rules('contents','내용','required');
 
    if ( $this->form_validation->run() == TRUE )
    {
     if ( !$this->input->post('subject',TRUE) AND !$this->input->post('contents',TRUE) )
     {
      //글 내용이 없을 경우, 프로그램 단에서 한번 더 체크
      alert('비정상적인 접근입니다.','/sns/controlls/lists/page/'.$pages);
      exit;
     }
 
     if($_FILES) //수정할 파일이 있다면
     {
      //upload 실행
      $config = array(
       'upload_path' => 'uploads/',
       'allowed_types' => 'gif|jpg|png',
       'encrypt_name' => TRUE,
       'max_size' => '1000'
      );
 
      $this->load->library('upload',$config);
 
      if(!$this->upload->do_upload())
      {
       $data['error'] = $this->upload->display_errors();
 
       $this->load->view('modify_photo_v',$data);
      }
      else
      {
       $upload_data = $this->upload->data();
 
       if($upload_data['image_width'] > 300)
       {
        //이미지 리사이즈, 파일명_thumb.확장자 형태로 섬네일 생성
        $config['image_library'] = 'gd2';
        $config['source_image'] = $upload_data['full_path'];
        $config['create_thumb'] = TRUE;
        $config['maintain_ratio'] = TRUE;
        $config['width'] = 300;
        $config['hight'] = 300;
 
        $this->load->library('image_lib',$config);
        $this->image_lib->resize();
       }
      }
     }
     else
     {
      $upload_data = array();
     }
     //수정할 데이터 정리
     $upload_data['subject'] = $this->input->post('subject',true);
     $upload_data['contents'] = $this->input->post('contents',true);
     $upload_data['user_id'] = $this->session->userdata('username');
     $upload_data['id'] = $id;
 
     $result = $this->sns_m->update_sns($upload_data);
 
     redirect('/controlls/lists'); exit;
 
     //페이스북 전송
     if($result)
     {
      //sns 라이브러리 로드
      $this->load->library('sns');
      $this->facebook = $this->sns->facebook();
      $this->facebook->setCallback(site_url('upload_photo/facebook_upload/'.$result));
 
      if(!$this->facebook->isLoggedIn())
      {
       $this->facebook->login();
       }
     }
     else
     {
      echo "<script> alert('입력 실패했습니다.'); </script>";
      redirect('/controlls/upload_photo');
     }
 
     if ($result)
     {
      //글 작성 성공 시 게시판 목록으로
      alert('수정되었습니다.','/sns/controlls/lists/page/'.$pages);
      exit;
     }
     else
     {
      //글 수정 실패 시 글 내용으로
      alert('다시 수정해 주세요.','/sns/controlls/view/'.$id.'/page/'.$this->uri->segment(5));
      exit;
     }
    }
    else
    {
     //게시물 내용 가져오기
     $data['views'] = $this->sns_m->get_view($id);
 
     //쓰기 폼 뷰 호출
     $this->load->view('modify_photo_v',$data);
 
    }
   }
   else
   {
    alert('로그인 후 수정하세요','/sns/auth/login/');
    exit;
   }
 }
 
 function url_explode($url, $key)
 {
  $cnt = count($url);
  for($i=0; $cnt>$i; $i++ )
  {
   if($url[$i] ==$key)
   {
    $k = $i+1;
    return $url[$k];
   }
  }
 }
}   

 다음글 세션관련 질문입니다. (4)
 이전글 p203 세션 로드 후 게시판에서 보안키를 요구하네요 (4)

댓글

책상다리 / 2013/11/06 13:14:26 / 추천 0
 아..해결했습니다. controllers 부분에 auth.php파일이 없는걸 발견했습니다.
이상하네요..ㅠㅠ bbs에서 통째로 가져왔는데..ㅠㅠ
변종원(웅파) / 2013/11/06 14:14:42 / 추천 0
네. 답변 올리러 들어왔는데 자답이 있네요.

404는 파일이 없다는 에러입니다. not found

ci에서 주소가 컨트롤러와 메소드(함수)와 연결되는 걸 아실테니 다음부터는
해당 파일이 있는지 살펴보세요.