소스 : 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++;
}
?>
댓글 ( 4)
댓글 남기기