Codeigniter

소스 : https://github.com/braverokmc79/Codeigniter_project2

 

SQL

 

-- 테이블 ci_book의 구조를 덤프합니다. sns_files
DROP TABLE IF EXISTS `sns_files`;
CREATE TABLE IF NOT EXISTS `sns_files` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `pid` int(10) NOT NULL DEFAULT '0',
  `user_id` varchar(30) NOT NULL,
  `subject` varchar(100) NOT NULL,
  `contents` varchar(200) NOT NULL COMMENT '내용',
  `file_path` varchar(150) NOT NULL,
  `file_name` varchar(100) NOT NULL COMMENT '서버 저장 경로와 변경된 파일명',
  `original_name` varchar(100) NOT NULL COMMENT '서버 저장 경로와 원래 파일명',
  `detail_info` varchar(500) NOT NULL COMMENT '타입, 크기 등의 정보',
  `hit` int(10) NOT NULL DEFAULT '1',
  `reg_date` datetime NOT NULL COMMENT '등록일',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT='SNS 프로젝트';

-- Dumping data for table ci_book.sns_files: ~16 rows (대략적)
DELETE FROM `sns_files`;
/*!40000 ALTER TABLE `sns_files` DISABLE KEYS */;
INSERT INTO `sns_files` (`id`, `pid`, `user_id`, `subject`, `contents`, `file_path`, `file_name`, `original_name`, `detail_info`, `hit`, `reg_date`) VALUES
	(2, 0, 'advisor', '다람쥐', '다람쥐 사진 테스트 업로드', 'F:/xampp/htdocs/sns/uploads/', 'f3f88649f5f729031baada79d973f651.jpg', '다람쥐.jpg', 'a:4:{s:9:"file_size";i:12;s:11:"image_width";i:226;s:12:"image_height";i:150;s:8:"file_ext";s:4:".jpg";}', 4, '2013-02-16 05:48:25'),
	(3, 0, 'advisor', '벌 그림', '사진', 'F:/xampp/htdocs/sns/uploads/', '7b5dd6cfa920af8476db8ae47f9be405.jpg', 'thumb_2988812521.jpg', 'a:4:{s:9:"file_size";i:13;s:11:"image_width";i:226;s:12:"image_height";i:150;s:8:"file_ext";s:4:".jpg";}', 1, '2013-02-17 04:03:44'),
	(4, 0, 'advisor', '벌 그림', '사진', 'F:/xampp/htdocs/sns/uploads/', '6ec103f9fe1ec9bab2cc3d9a9433bc1a.jpg', 'thumb_2988812521.jpg', 'a:4:{s:9:"file_size";i:13;s:11:"image_width";i:226;s:12:"image_height";i:150;s:8:"file_ext";s:4:".jpg";}', 1, '2013-02-17 04:04:10'),
	(5, 0, 'advisor', '양복2', '사진2', 'F:/xampp/htdocs/sns/uploads/', 'c56ea3b24af2490ae3bc8d9e8605d02b.jpg', 'small2013877009.jpg', 'a:4:{s:9:"file_size";i:25;s:11:"image_width";i:140;s:12:"image_height";i:140;s:8:"file_ext";s:4:".jpg";}', 26, '2013-02-17 07:19:40'),
	(8, 5, 'advisor', '', '양복댓글1', '', '', '', '', 1, '2013-02-17 04:43:39'),
	(9, 5, 'advisor', '', '댓글2', '', '', '', '', 1, '2013-02-17 04:43:58'),
	(10, 5, 'advisor', '', '댓글3', '', '', '', '', 1, '2013-02-17 04:44:31'),
	(11, 5, 'advisor', '', '댓글4', '', '', '', '', 1, '2013-02-17 04:47:00'),
	(12, 5, 'advisor', '', '댓글5', '', '', '', '', 1, '2013-02-17 04:47:33'),
	(14, 0, 'advisor', 'codeigniter 로고', '불꽃', 'F:/xampp/htdocs/sns/uploads/', 'c437244b22242e46bc637209ea18aab8.png', 'logo_ci1.png', 'a:4:{s:9:"file_size";i:2;s:11:"image_width";i:48;s:12:"image_height";i:70;s:8:"file_ext";s:4:".png";}', 1, '2013-02-17 05:30:54'),
	(15, 0, 'advisor', '해파리', '모질라 로고\r\n\r\n공룡?!!\r\n\r\nhello', 'F:/xampp/htdocs/sns/uploads/', 'a9841c30413a85d8f65d597749729bf4.jpg', 'Jellyfish.jpg', 'a:4:{s:9:"file_size";i:757;s:11:"image_width";i:1024;s:12:"image_height";i:768;s:8:"file_ext";s:4:".jpg";}', 21, '2013-02-17 11:55:22'),
	(16, 0, 'advisor', '큰 이미지', '폭이 100px 보다 큰  이미지일 경우 썸네일 만듬.', 'F:/xampp/htdocs/sns/uploads/', 'e1f017a0c29a4c49ddce0e437b446bd5.jpg', 'Penguins.jpg', 'a:4:{s:9:"file_size";i:759;s:11:"image_width";i:1024;s:12:"image_height";i:768;s:8:"file_ext";s:4:".jpg";}', 7, '2013-02-17 11:53:00'),
	(17, 0, 'advisor', '사막', '사막', 'F:/xampp/htdocs/sns/uploads/', '6d6438a28c498f114ff8aa579a0e11e6.jpg', 'Desert.jpg', 'a:4:{s:9:"file_size";i:826;s:11:"image_width";i:1024;s:12:"image_height";i:768;s:8:"file_ext";s:4:".jpg";}', 1, '2013-02-17 11:53:53'),
	(18, 0, 'advisor', '국화', '국화', 'F:/xampp/htdocs/sns/uploads/', 'e1f4bfe01c582b09a99327d962eabaca.jpg', 'Chrysanthemum.jpg', 'a:4:{s:9:"file_size";i:858;s:11:"image_width";i:1024;s:12:"image_height";i:768;s:8:"file_ext";s:4:".jpg";}', 1, '2013-02-17 11:54:04'),
	(19, 0, 'advisor', '등대', '등대', 'F:/xampp/htdocs/sns/uploads/', '59c22ce0a390771c4f6a87e4db012c0e.jpg', 'Lighthouse.jpg', 'a:4:{s:9:"file_size";i:548;s:11:"image_width";i:1024;s:12:"image_height";i:768;s:8:"file_ext";s:4:".jpg";}', 3, '2013-02-17 11:54:50'),
	(20, 0, 'advisor', '코알라', '코알라', 'F:/xampp/htdocs/sns/uploads/', 'ad1a87a2d52d40e32fc5658bdff05310.jpg', 'Koala.jpg', 'a:4:{s:9:"file_size";i:762;s:11:"image_width";i:1024;s:12:"image_height";i:768;s:8:"file_ext";s:4:".jpg";}', 9, '2013-02-17 11:55:08');
/*!40000 ALTER TABLE `sns_files` ENABLE KEYS */;

 

 

application/config/config.php

 

$config['index_page'] =''; //빈값으로 설정

$config['encryption_key']='dnffkffk';// 아무 값이나 영문으로 설정. 세션 클래스에서 암호화 키로 사용

 

 

C - 컨트롤

 

년월일 디렉토리 생성

//디렉토리 생성 
				$day=date("Ymd"); 
				$day1=substr($day,0,-4); 
				$save_dir = "uploads/".$day1."/".$day; 
				  
				if(!is_dir("uploads/".$day1)) { 
				    @mkdir("uploads/".$day1,0777); 
				    @chmod("uploads/".$day1,0777); 
				}
				if(!is_dir("uploads/".$day1."/".$day)) {	
				     @mkdir("uploads/".$day1."/".$day,0777); 
				    @chmod("uploads/".$day1."/".$day,0777); 
				 } 

				$config =array(
						'upload_path' =>$save_dir,
						'allowed_types' => 'mp4|avi|wmv|mp3|hwp|pdf|zip|txt|xml|html|xlsx|jpg|gif|png',
						'encrypt_name' =>TRUE,
						'max_size'=>'1024'
					
				);

 

 

 

Controlls.php

<?php defined('BASEPATH') OR 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-quiv="Content-Type" content="text/html; charset=utf-8" />';

	}


	// 사이트 헤더, 푸터가 자동으로 추가 된다.
	public function _remap($method)
	{
		//헤더 include
		$this->load->view('header_v');

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

		//푸터 include
		$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
			{

				//디렉토리 생성 
				$day=date("Ymd"); 
				$day1=substr($day,0,-4); 
				$save_dir = "uploads/".$day1."/".$day; 
				  
				if(!is_dir("uploads/".$day1)) { 
				    @mkdir("uploads/".$day1,0777); 
				    @chmod("uploads/".$day1,0777); 
				}
				if(!is_dir("uploads/".$day1."/".$day)) {	
				     @mkdir("uploads/".$day1."/".$day,0777); 
				    @chmod("uploads/".$day1."/".$day,0777); 
				 } 

				$config =array(
						'upload_path' =>$save_dir,
						'allowed_types' => 'mp4|avi|wmv|mp3|hwp|pdf|zip|txt|xml|html|xlsx|jpg|gif|png',
						'encrypt_name' =>TRUE,
						'max_size'=>'1024'
					
				);


				$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;
				}

			}

		}
		else
		{
			echo "<script>alert('로그인 후 작성하세요.');
			document.location='/todo/auth/login/';
			</script>";
			exit;
		}
	}



	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);
		

		$this->load->view('lists_v', $data);
/*
		if( BROWSER_TYPE == 'M' )
		{
			$this->load->view('mobile_lists_v', $data);
		}
		else
		{
			$this->load->view('lists_v', $data);
		}
*/

	}


}


 

업로드가  성공한 경우 $this->upload->data() 함수를 실행하여 다음과 같은 결과를 얻을 수 있다.

Array

(

 [file_name] =>59c22ctetset.jpg //설정에서 암호화를 선택했기 때문에 파일명이 변경되었습니다.

 [file_type] => image/jpeg //파일타입

 [file_path] => /path/to/your/uploads/ // 업로드된 디렉토리

 [full_path] => /path/to/your/uploads/59c22ctetset.jpg

 [raw_name] => 59c22ctetset //파일명ㅇ만 반환

 [orig_name] =>mypic.jpg  // 업로드한 원래 파일명

 [file_ext] => .jpg //파일 확장자

 [file_size] => 22.2 //파일 크기

 [is_image] => 1 // 이미지인지 여부. 바이러스나 악성 코드를 이미지 확장자로 바꿔서 올릴 경우 0 으로 나옴.

 [image_width] => 800 // 이미지 넓이

 [image_height] => 600 //이미지 높이

 [image_type] => jpeg //이미지 타입

 [image_size_str] =>width="800" height="200" // img tag 에 사용하기 쉬운 형태로 넓이 , 높이를 변환

)

 

 

 

 

M - 모델

sns_m.php

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

/*

 사용자 인증 모델

*/
class Sns_m extends CI_Model
{
	function __construct()
	{
		parent::__construct();
	}


	//아이디 비빌번호 체크
	function insert_sns($arrays)
	{
		// 업로드파일 기타 정보
		
		$detail=array(
			'file_size'=>(int)$arrays['file_size'],
			'image_width'=>$arrays['image_width'],
			'image_height'=>$arrays['image_height'],
			'file_ext'=>$arrays['file_ext']
		);

		$insert_array=array(
			'user_id'=>$arrays['user_id'],
			'subject'=>$arrays['subject'],
			'contents'=>$arrays['contents'],
			'file_path'=>$arrays['file_path'],
			'file_name'=>$arrays['file_name'],
			'original_name'=>$arrays['orig_name'],
			'detail_info'=>serialize($detail),
			'reg_date'=>date('Y-m-d H:i:s')
		);

		$this->db->insert('sns_files', $insert_array);

		//삽입된 ID 값 반환
		$result=$this->db->insert_id();

		//결과 반환
		return $result;

	}



/**
	 * SNS 리스트 가져오기
	 *
	 * @return array 리스트
	 */
	function get_sns_list($table, $type='', $offset='', $limit='', $search_word='')
	{
		$sword= '';

		if ( $search_word != '' )
     	{
     		//검색어가 있을 경우의 처리
     		$sword = ' and (subject like "%'.$search_word.'%" or contents like "%'.$search_word.'%" or original_name like "%'.$search_word.'%")';
     	}

    	$limit_query = '';

    	if ( $limit != '' OR $offset != '' )
     	{
     		//페이징이 있을 경우의 처리
     		$limit_query = ' LIMIT '.$offset.', '.$limit;
     	}

    	$sql = "SELECT * FROM ".$table." WHERE pid = '0' ".$sword." ORDER BY id DESC".$limit_query;
   		$query = $this->db->query($sql);

		if ( $type == 'count' )
     	{
     		//리스트를 반환하는 것이 아니라 전체 게시물의 갯수를 반환
	    	$result = $query->num_rows();
     	}
     	else
     	{
     		//게시물 리스트 반환
	    	$result = $query->result();
     	}

    	return $result;
	}

}

 

serialize()

정보 배열을 serialize 화 하면 다음과 같이 저장할 수 있습니다. 화면 출력을 위해 가져와 사용할 때는 unserialize 함수를 이용해 다시 

벼열로 만듭니다.

 

 

a:4:{s:9:"file_size";i:649;s:11:"image_width";i:936;s:12:"image_height";i:526;s:8:"file_ext";s:4:".png";}

 

 

=> 다음과 같은 방법으로 데이터를 가져 올 수 있다.

    <?php 
                        $dtailInfoArray=unserialize($lt->detail_info);
                    //    echo var_dump($dtailInfoArray);
                    //    echo  implode(",", $dtailInfoArray);
                        echo "파일사이즈 :" .$dtailInfoArray["file_size"];
                 ?>

출력 : array(4) { ["file_size"]=> int(650) ["image_width"]=> int(936) ["image_height"]=>

int(526) ["file_ext"]=> string(4) ".png" }

출력 :650,936,526,.png

출력 :파일사이즈 :650

 

 

V - 뷰

upload_photo_v.php

 

 

form_open_multipart 사용시 CSRF 가 다음과 같이 적용된다.

 

<form action="http://127.0.0.1/todo/controlls/upload_photo" class="form-horizontal" id="upload_action" enctype="multipart/form-data" method="post" accept-charset="utf-8">
<input type="hidden" name="csrf_test_name" value="140a3d8fde145008b4074b0c9fda9c5e">   

 

<script>
		$(document).ready(function(){
			$("#write_btn").click(function(){
				if($("#input01").val() == ''){
					alert('업로드할 파일을 선택해주세요.');
					$("#input01").focus();
					return false;
				} else {

					$("#upload_action").submit();
				}
			});
		});
	
</script>


	<article id="board_area">
		<header>
			<h1></h1>
		</header>
<?php
$attributes = array('class' => 'form-horizontal', 'id' => 'upload_action');
echo form_open_multipart('/controlls/upload_photo', $attributes);
?>
		  <fieldset>
		    <legend>SNS 쓰기</legend>
		    <div class="control-group">
		      <label class="control-label" for="input01">사진 업로드</label>
		      <div class="controls">
		        <input type="file" class="input-xlarge" id="input01" name="userfile" value="<?php echo set_value('userfile'); ?>">
		        <p class="help-block">파일을 선택해주세요.</p>
		      </div>
			  <label class="control-label" for="input01">제목</label>
		      <div class="controls">
		        <input type="text" class="input-xlarge" id="input02" name="subject" value="<?php echo set_value('subject'); ?>">
		        <p class="help-block">제목을 써주세요.</p>
		      </div>
		      <label class="control-label" for="input02">내용</label>
		      <div class="controls">
		        <textarea class="input-xlarge" id="input03" name="contents" rows="5"><?php echo set_value('contents'); ?></textarea>
		        <p class="help-block">내용을 써주세요.</p>
		      </div>

			  <div class="controls">
		        <p class="help-block">
<?php
if(@$error) {
	echo $error."<BR>";
}
?>
				<?php echo validation_errors(); ?></p>
		      </div>

		      <div class="form-actions">
		        <button type="button" class="btn btn-primary" id="write_btn">작성</button>
		        <button class="btn" onclick="document.location.reload()">취소</button>
		      </div>
		    </div>
		  </fieldset>
		</form>
	</article>

 

//'D:/AutoSet10/public_html 앞부분 제거
    //지정된 문자열을 찾는다. /todo 위치 ex )29
    $uploadPathStrPos =strpos($lt->file_path, '/todo');
    $uploadPath=substr($lt->file_path, $uploadPathStrPos);
    
    
    //썸네일 파일이 존재 하면
    if(is_file('./uploads/'.$file_info[0]."_thumb.".$file_info[1]))
    {
        $thumb_img = $uploadPath.'/'.$file_info[0]."_thumb.".$file_info[1];
    }
    else
    {

        $thumb_img = $uploadPath.'/'.$lt->file_name;
    }

 

 

 

 

 

list_v.php


 

 

	<script>
	$(document).ready(function(){
		$("#search_btn").click(function(){
			if($("#q").val() == ''){
				alert('검색어를 입력해주세요.');
				return false;
			} else {
				var act = '/todo/controlls/lists/q/'+$("#q").val()+'/page/1';
				$("#bd_search").attr('action', act).submit();
			}
		});
	});

	function board_search_enter(form) {
		var keycode = window.event.keyCode;
		if(keycode == 13) $("#search_btn").click();
	}

	function lastPostFunc()	{
		var last_id = $(".wrdLatest:last").attr("id") ;

		$('div#lastPostsLoader').html('<img src="/sns/images/bigLoader.gif">');
		$.post("/sns/ajax_board/more_list/"+last_id,

		function(data){
			if (data != "") {
			$(".wrdLatest:last").after(data);
			}
			$('div#lastPostsLoader').empty();
		});
	}
	$(window).scroll(function(){
		if  ($(window).scrollTop() == $(document).height() - $(window).height()){
			lastPostFunc();
		}
	});
	</script>
	<article id="board_area">
		<div><p></p></div>
		<div>
			<form id="bd_search" method="post" class="well form-search" >
				<i class="icon-search"></i> <input type="text" name="search_word" id="q" onkeypress="board_search_enter(document.q);" class="input-medium search-query" /> <input type="button" value="검색" id="search_btn" class="btn btn-primary" /> <a href="/todo/controlls/upload_photo/page/<?php echo $this->uri->segment(5);?>" class="btn btn-success" style="margin-left:370px;">쓰기</a>
			</form>

		</div>
		<table cellspacing="0" cellpadding="0" class="table table-striped">
			<tbody>
			<tr class="wrdLatest">
<?php
$i=1;
foreach ($list as $lt)
{
	$file_info = explode(".", $lt->file_name);

	//'D:/AutoSet10/public_html 앞부분 제거
	//지정된 문자열을 찾는다. /todo 위치 ex )29
	$uploadPathStrPos =strpos($lt->file_path, '/todo');
	$uploadPath=substr($lt->file_path, $uploadPathStrPos);
	
	
	//썸네일 파일이 존재 하면
	if(is_file('./uploads/'.$file_info[0]."_thumb.".$file_info[1]))
	{
		$thumb_img = $uploadPath.'/'.$file_info[0]."_thumb.".$file_info[1];
	}
	else
	{

		$thumb_img = $uploadPath.'/'.$lt->file_name;
	}
?>

				<th scope="row">
					<img src="<?php echo $thumb_img;?>" width="100px" height="100px"><br>
					<a rel="external" href="/sns/controlls/view/<?php echo $lt->id;?>"><?php echo $lt->subject;?></a> <br>
					<time datetime="<?php echo mdate("%Y-%M-%j", human_to_unix($lt->reg_date));?>"><?php echo mdate("%M. %j, %Y", human_to_unix($lt->reg_date));?></time>
				</th>
<?php
	if($i % 2 == 0)
	{
?>
			</tr>
			<tr class="wrdLatest" id="<?php echo $i?>">
<?php
	}
	$i++;
}
?>
			</tr>
			</tbody>

		</table>
		<div id="lastPostsLoader"></div>
	</article>

 

 

파일 업로드 라이브러리 설정

http://codeigniter-kr.org/user_guide_2.1.0/libraries/file_uploading.html

 

설정하기 Setting Preferences

다른 라이브러리들과 마찬가지로 , 어떤 파일이 업로드 허용될지 설정할 수 있습니다.위에서 만든 컨트롤러에서 아래의 설정을 추가해보세요 :

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';

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

// Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
$this->upload->initialize($config);

위 설정은 대부분 무엇을 뜻하는지 직관적으로 알수 있으실겁니다. 아래 테이블은 가능한 설정들을 보여줍니다.

설정들 Preferences

아래의 설정들이 사용가능합니다.설정을 명시하지않을경우 사용될 기본값들도 확인하세요 .

설정 기본값 옵션 설명
upload_path None None 업로드 파일이 위치할 폴더경로 .폴더는 쓰기 가능해야하며 경로는 절대경로 혹은 상대경로를 사용합니다.
allowed_types None None 업로드를 허용할 파일의 마임타입(mime types)을 설정합니다. 보통 파일 확장자는 마임타입으로 사용될수 있습니다. 멀티플타입은 파이프를 이용하여 구분합니다.
overwrite FALSE TRUE/FALSE (boolean) true 로 설정된 상태에서, 같은 이름의 파일이 이미 존재한다면 덮어쓸것입니다. false 로 설정되어있으면, 파일명에 숫자가 추가로 붙게됩니다.
max_size 0 None 업로드 파일의 최대크기(KB)를 지정합니다. 0으로 설정하면 크기 제한이 없게됩니다.대부분의 PHP는 php.ini 파일에 업로드 파일 크기 설정이 이미 되어있습니다.일반적으로 2 MB ( 2048 KB)가 기본입니다.
max_width 0 None 업로드 파일의 최대 너비(픽셀단위) 를 설정합니다. 0 이면 제한이 없습니다.
max_height 0 None 업로드 파일의 최대 높이(픽셀단위)를 설정합니다. 0이면 제한이 없습니다.
max_filename 0 None 파일이름의 최대길이를 지정합니다.0이면 제한이 없습니다..
encrypt_name FALSE TRUE/FALSE (boolean) TRUE로 설정하면 파일이름은 랜덤하게 암호화된 문자열로 변합니다. 파일을 업로드한 사람이 파일명을 알수 없도록할때 유용합니다.
remove_spaces TRUE TRUE/FALSE (boolean) TRUE로 설정하면 파일명에 공백이 있을경우 밑줄(_)로 변경됩니다.이 옵션은 사용을 권장합니다.

 

 

 

업로드 함수

 

$this->upload->do_upload()

여러분의 설정에 따라 업로드를 수행합니다.참고: 기본설정은 파일이 userfile라는 폼필드로부터 업로드 될것이라고 기대합니다.또한 폼은 multipart 타입이라야 합니다.:

<form method="post" action="some_action" enctype="multipart/form-data" />

필드명을 여러분이 저장하고싶다면 do_upload 함수에 아래와같이 그 이름을 파라미터로 넘겨주시면 됩니다.:

$field_name = "some_field_name";
$this->upload->do_upload($field_name)

$this->upload->display_errors()

do_upload() 함수가 실패했을때 에러메시지를 추출해줍니다. 이 함수는 자동으로 echo 까지 수행해주지는 않습니다. 단지 데이터만 전달해줄뿐이므로 그 후처리는 여러분이 원하는대로 할 수 있습니다..

에러메세지 포멧설정 Formatting Errors

기본으로 위함수는 에러를 <p> 태그들로 감쌉니다. 여러분은 아래와같은 방법으로 다른 구분자를 설정할 수 있습니다.:

$this->upload->display_errors('<p>', '</p>');

$this->upload->data()

$this->upload->do_upload() 가 성공한 경우 업로드된 파일의 여러 정보를 반환 합니다. 이 정보를 가지고 

DB 입력 및 기타 액션을 처리 합니다.

 

업로드한 파일에 관련된 모든 데이터를 배열의 형태로 리턴해주는 헬퍼 함수 입니다.다음 프로토타입을 참조하세요 :

Array
(
    [file_name]    => mypic.jpg
    [file_type]    => image/jpeg
    [file_path]    => /path/to/your/upload/
    [full_path]    => /path/to/your/upload/jpg.jpg
    [raw_name]     => mypic
    [orig_name]    => mypic.jpg
    [file_ext]     => .jpg
    [file_size]    => 22.2
    [is_image]     => 1
    [image_width]  => 800
    [image_height] => 600
    [image_type]   => jpeg
    [image_size_str] => width="800" height="200"
)

설명 Explanation

위 배열 아이템에대한 설명입니다..

아이템 설명
file_name 업로드한 파일이름입니다. 확장자까지 포함합니다.
file_type 파일의 마임타입(Mime type)입니다.
file_path 파일의 서버상 절대경로입니다.
full_path 파일이름까지 포함한 서버상의 절대경로입니다.
raw_name 확장자 없는 파일명입니다.
orig_name 원래파일 이름입니다. 파일이름을 암호화 하는 옵션을 사용한경우에만 유용합니다.
file_ext 점을 포함한 파일 확장자입니다.
file_size 킬로바이트(KB)로 표시된 파일 크기입니다.
is_image 파일이 이미지인지 아닌지를 나타냅니다. 1 = 이미지. 0 = 이미지아님.
image_width 이미지 너비.
image_heigth 이미지 높이.
image_type 이미지 타입. 일반적으로 점이 없는 파일 확장자 입니다.
image_size_str 이미지의 너비와 높이를 포함하는 문자열입니다. 이미지 태그에 삽입할때 유용합니다.

 

 

 

10.2  이미지 줄이기

 

이미지 줄이기는 상당힌 간단합니다. 어느 정도를 어떤 비율로 줄일지 설정을 하고 업로드된 파일에 줄이기 함수를 

실행하면 그만입니다.

 

constrolls.php 에서 다음과 같이 변경만 하면 끝

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['height'] = 300;

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

						$this->image_lib->resize();
					}



					$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;
				}

 

썸네일 출력은 다음과 같이 하면 된다.

 

list_v.php

<?php
$i=1;
foreach ($list as $lt)
{
	$file_info = explode(".", $lt->file_name);

	//'D:/AutoSet10/public_html 앞부분 제거
	//지정된 문자열을 찾는다. /todo 위치 ex )29
	$uploadPathStrPos =strpos($lt->file_path, '/todo');
	$uploadPath=substr($lt->file_path, $uploadPathStrPos);
	
	
	//썸네일 파일이 존재 하면
	echo " 파일 존재 : " .$uploadPath.''.$file_info[0]."_thumb.".$file_info[1]."<br>";

	if(is_file($_SERVER['DOCUMENT_ROOT'].$uploadPath.''.$file_info[0]."_thumb.".$file_info[1]))
	{
		$thumb_img = $uploadPath.''.$file_info[0]."_thumb.".$file_info[1];
	}
	else
	{
		$thumb_img = $uploadPath.'/'.$lt->file_name;
	}

?>

				<th scope="row">
					<img src="<?php echo $thumb_img ;?>" ><br>
					<a rel="external" href="/sns/controlls/view/<?php echo $lt->id;?>"><?php echo $lt->subject;?></a> <br>
					<time datetime="<?php echo mdate("%Y-%M-%j", human_to_unix($lt->reg_date));?>"><?php echo mdate("%M. %j, %Y", human_to_unix($lt->reg_date));?></time>
				</th>
				<th>
				<?php 
						$dtailInfoArray=unserialize($lt->detail_info);
					//	echo var_dump($dtailInfoArray);
					//	echo  implode(",", $dtailInfoArray);
						echo "파일사이즈 :" .$dtailInfoArray["file_size"];
				 ?>
			
				</th>

<?php
	if($i % 2 == 0)
	{
?>
			</tr>
			<tr class="wrdLatest" id="<?php echo $i?>">
<?php
	}
	$i++;
}
?>

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

젊은이에게 행복은 환상이다. 그것은 청춘을 잃어버린 사람들의 환상에 불과한 것이다. - W. 서머셋 모음

댓글 ( 4)

댓글 남기기

작성