2007/10/28

1 개의 생각과 1개의 길

삶에는 1개의 생각과 1개의 길이 있다.

다만 1개의 생각이 1개의 길을 결정한다는 것이다.

사랑 또한 마찬가지이다. 1 사람과 1 사람이 만나서 사랑을 하는 것이다.

나는 언제쯤 남은 1개를 찾을 수 있을까..?

2007/10/26

뻔뻔한 발언

- 술자리에 여종업원들도 있었나?
"3명 있었다. 원래 여종업원이 없는 술집이었다. 그런데 (누군가) 전화로 (여종업원을) 부르는 것 같았다."
-> 원래 없었다면 불렀어도 나왔어야 하는 법. 정치인이 그런 얘기로 시끄러울게 뻔한데 이런걸 답변이라고 하는지?


- 술값은 누가 계산했나.
"내가 계산을 하려고 카드를 꺼내니까 피감기관 쪽에서 '20만원도 안되는데 그걸 뭘 내시냐'면서 계산하더라. 근데 무슨 몇 천만원 (접대를 받았다고 기사가 나오)이냐."
-> 애시당초 술자리에 간 것이 잘못이다. 만약 의원님께서 지불하셨어도 이런 얘기는 나온다. 정치인은 더치페이 말곤 어떠한 상황에서도 말은 벌어진다.


- 술 자리는 몇시에 파했나?
"밤 10시 이전에 파했다. 그 뒤에 피감기관들이 자기들끼리 술을 마신 건지 어쩐 건지는 모르겠다."
-> 당연히 모르겠지!


- 식사자리에는 국감에 출석한 여야 의원들이 다 있었나?
"그렇다."(그러나 신당과 한나라당 일부 의원은 식사 자리에는 참석하지 않았다고 주장했다-편집자주)
-> 여권은 어느당이 있나? 식사자리에 있었던 모든 의원의 이름을 대는게 맞는 법.


- 한나라당에서 그날 국감에 불참한 의원은 누군가?
"강재섭·박형준·박성범·신상진 의원은 안왔다."(그러나 임 의원의 발언과 달리 박성범, 신상진 의원은 국감에는 출석했으나 식사자리에는 불참한 것으로 알려졌다-편집자주)
-> 자기 당의 의원님들이 누가 있는지도 몰라. 의원님 정치인이십니까?


- 보도에 대한 대처는 어떻게 할 건가?
"(상임위에) 올라가서 대책회의를 해봐야겠다."
-> 틀린말 한 것도 아닌데 열받을 필요있나?


- 당시 묵었던 호텔 이름은 무엇인가.
"○○○이다."
-> 정치인 돈 많네. 호텔도 가고 나 같으면 가장 싼 여관 간다.


- 식사자리에서 밥값은 누가 냈는지 아나?
"밥값 누가 냈는지 누가 아나. 국회서 냈는지 누가 냈는지…(모른다)"
-> 자신의 행동에 정당한 정치인이라면 자신의 밥값 정도는 자기가 내야 하는거 아닌가?


- 보좌관들 끼리 따로 술자리가 있었던 건 아닌가?
"그것까지 내가 어떻게 아나?"
-> 제 집 식구들(보좌관들)이 말 안해주면 이미 의원님에 대한 실망이 있는 것 아닌가?

-->
어느 당의 정치인께서 신문에 답해주신 질답을 내 생각대로 정리했다.

2007/10/25

오늘의 한마디

지식 없는 인격은 유약하고 쓸모없는 것이며, 인격 없는 지식은 위험하고 무서운 것이다 - 새뮤얼 존슨

2007/10/03

노무현씨 집이 어쨌다는 것이냐..

한 신문에 이런 댓글들이 달렸다.
 
 
잘 읽어보니 한 네티즌께서 미수다 게시판에 사유리를 욕한 모양이다. 노무현씨 집이라고 해서.
 
근데 문제의 본질을 많이 벗어나 있는 것처럼 보인다. 아니 적어도 그녀가 외국인이라서 그럴지도 모른다. 왜?
 
참여 정부. 다시 말해 노무현 후보가 대통령이 되면서 세워진 제대로 된 2번째 민주 정부가 출범하고 나서 옛날들과 다르게 대통령께선 국민의 손과 발을 향하셨고 국민을 떠받치려 들었다. 그런것의 성과로는 독재적인 모습이 없어졌다는 거다. 이건 굉장히 신임할 수 있는 아니 과거에 대통령을 함부로 욕하면 잡혀갔던 것과 사뭇 대조적이다. 다른 나라 사람이 노무현씨 집이라고 하면 어떻게 생각하면 그 나라 대통령을 가벼이 여긴다고도 볼 수 있지만, 더 친근하게 느낀다고도 볼 수 있지 않을까 싶다.
 
그리고, 한국인들 너무 주제 파악이 안된다. 나도 같은 한국인이지만 자기네들이 노무현 대통령에게 "노빠, 뇌빠" 등의 표현과 차마 국가원수에게 하지 못할말들을 쏟아놓고 이제와서 오리발이라니 한심하기 그지없다. 적어도 그런식으로 이야기 하지 않았다면 나도 이렇게까지 얘기하지 않았겠지만 무엇이 되었든 노무현 대통령은 현재 국가의 원수가 아니던가. 유교를 국교로 삼았던 우리의 마지막 왕조였던 조선도 결코 임금 앞자리에서 신하나 백성이 왕을 가벼이 하지 않았다.
 
지금의 한국은 도대체 어떻게 되먹은 나라인가. 반성들 좀 하시게나.

2007/09/19

허허 선배의 이야기를 전한 것 뿐이라..

모 정당의 모 대선 후보께서 최근 마사지걸이라는 말을 하셨나 보다. 그런데 해명 차원에서 이렇게 말한다 하더라
 
"내가 아는 45년전 이야기. 그것도 선배의 이야기를 전한 것 뿐이다" 라고
 
아니 그럼 그 후보께서는 대통령에 선출되셔도 다른 나라가서 높으신 분들 앉아계시면 이런 말 할 참인가?
 
"내가 아는 모 극빈국 이야기. 그것도 보좌관의 이야기를 전한 것 뿐이다" 라고
 
이 분 역사인식이 제대로 박혀있는 분인지 정말 의심스럽다. 언행을 조심해야 할 분이 이런 소릴 한다면 올바른 것이 그 어디에 존재하겠는가???

2007/08/31

여우비 - 임창정

멀어진 니 마음 이젠 상관없어 딴 남자들처럼 멋지게 잊어 볼테니깐. 많은 친구들이 내게 당부한 그녀의 가치 내겐 아무것도 느낄 수 없었던 너만의 멋. 왜 맨날 넌 시간이 없어 날 볼 때 또 딴 짓이니  널 원했던 건 맞아 나지만 그 댓가가 너무 커. 내 모양이 싫은 건지 가진게 없어 지쳤니 아냐 나도 싫어 너 같은 애 사실 이런 말하고 싶었어. 니가 뭐 대단한 미인인 것 같니 딴 여자들보다 못한 것도 많아 마음이지

맑은 봄날 여우비 같은 그녀 이해가 안가 내겐 잘해 준 적도 한번 없는 너였잖아. 왜 맨날 넌 시간이 없어 날 볼 때 또 딴 짓이니 널 원했던 건 맞아 나지만 그 댓가가 너무 커. 내 모양이 싫은 건지 가진게 없어 지쳤니 아냐 나도 싫어 너 같은 애 사실 이런 말하고 싶은데

(니가 반한 멋진 차 니가 반한 멋진 옷 니가 반한 그 무엇도 나는 없지만 지금은 그저 멋진놈 지금은 그저 미래만으로 모두 다 이겨 나갈 수 있어)

왜 맨날 넌 시간이 없어 날 볼 때 또 딴 짓이니 널 원했던 건 맞아 나지만 그 댓가가 너무 커. 내 모양이 싫은 건지 가진게 없어 지쳤니 아냐 나도 싫어 너 같은 애 사실 이런 말 하고 싶은데

슬레이어즈 Try Opening

아아~~
저 높은 하늘을 새가 되어 날아가고 싶어
아득히 먼 곳에 보이는 희망 찾아서
희망에 찬 마음으로 현실을 바라볼 수 있다면
더 이상 약해지지 않아
미래도 두렵진 않아
 
바람을 타고서 꿈에 저편 너머로
날아가고 싶어
용기의 날개를 달고서 날고싶어
 
새가되어 세상 바라보는 마음을
계속 간직할꺼야
어려운 현실을 난 이겨나갈꺼야!

You're Under Arrest 2기 Opening Theme

항상 혼잣말을 했었지
삶이 힘들때면
그래도 가슴뛰는 이 느낌
잃고 싶지 않아
꿈은 멀어져 가고
현실은 날 붙들고 있지만
바람이 불어올때도
웃는 얼굴 잃지 않고 힘껏 날 껴안고서
멋지게 살아갈꺼야
이제 Love Some body~
언젠지 몰라도
찾아낼꺼야
take my chance
온 세상 모든 시간이 멈춰도
저 하늘을 날고 싶어
이젠 Love Some body~
만나게 될꺼야
세상 하나뿐인 사람을
끝이 없는 젊음을 안고서
미랠 향해 달려봐
 

You're Under Arrest Ending Theme

항상 내 갈길을 고집했어
나만의 생각 그것 때문에
하지만 남은건 뜻 모를 외로움
 
늘 가까운 곳에 서있는 널
바라볼 수 밖에 없었기에
어쩔 수 없는 건 널 향한 그리움
 
가슴속 깊이 간직했던
아픔이 밀려와
말할수가 없었지 후~ 난 또 그자리
 
바람아 (불어오렴)
시간을 흐르게 하렴 (내마음 전해주렴)
영원한 시간속에 언젠가 아아~
말할 수 있을 것 같아
 
Thanks You Freinds...
 

2007/08/26

연예인들의 학력위조 혐의..

내 일하기도 바쁜데 잠시 엉뚱한데 시간을 좀 쏟아본다.

최근에 연예인들에 대한 학력 위조가 문화, 방송계에 커다란 바람을 불고 왔다. 많은 연예인들이 그런 분류에 속한다.

신정아, 김옥랑, 장미희, 심형래, 이창하, 최수종, 안재모, 오승현, 윤석화, 강석, 주영훈, 이지영 등 대중에게 많이 알려진 인물이 꽤 많다.

한가지 재미있는 것은 이번에 사람들이 떠들고 다니는 "인터넷에 너무 무관심했다", "그럴 의도는 없었다" 이런 이야기들 중 인터넷에 너무 무관심했에만 잠시 이야기 해볼까 한다.

연예인들이 그럴 의도가 있었든 없었든 그건 그네들만의 사정이고, 인터넷에 너무 무관심했다는 사실 거의 맞다. 심지어 내가 좋아하는 이모양 가수도 컴퓨터과 인터넷을 그렇게 잘알지 못한다(이건 실제로 만나서 본인에게 들었던..)

물론 가수나 연기자들은 그들만의 분야가 있으니 쓸때없이 인터넷에 소비하는 시간이 많은 사람들이나 전문가가 아닌 이상에서야 인터넷은 쉽게 다가설 수 없는 성역이다.

그런면에서 성역의 지킴이들이라 할 수 있는 인터넷 매니아나 포털 등은 정확한 정보의 양산과 배포를 해야만 한다.

이번 사건들에서 공통적으로 볼 수 있는 부분이 고의 여부를 떠나 포털 등이 대충 주서들은 말로 연예인들에 대한 학력을 게재해 놓는 것이다.

물론 연예인들이 잘했다는 건 절대 아니다. 하지만 성역 지킴이인 포털등은 사실 확인에 나서지 않아 수 많은 연예인들이 먼저 아니다 라고 말하게 하는게 좋은 것인가?

틀림없이 틀린 사실이다. 포털도 연예인들 학력에 대한 확실한 확인 후 올려야 하는 것이다. 일례로 최수종의 경우 소속사에도 잘못된 사실이 적혀 있었으니 포털만의 잘못이라고 할 수 없으나 오승현의 경우엔 그렇지 않았다.

일례로 A 포털은 오승현에 대해 단국대 입학까지만 적혀 있고, B 포털은 단국대 학사라고 되어 있던걸 확인해볼 수 있었다.

이런 상황에도 불구하고 여전히 연예인들에 대한 비난과 욕만 쏟아지고 실제 제대로된 학력을 넣지 않은 포털들은 아무런 욕도 먹고 있지 않다.

이런 문제들이 꼭 포털의 문제라고 보기도 어렵다. 인터넷은 참여로 이루어지는 바다이기 때문이다. 참여하지 않는다면 잘못된 사실은 고쳐질 수 없다.

그러나 포털도 반성해야 하지 않나 싶다. 정보를 제공한다는 이유 하나만으로 욕 먹지 아니하는 것은 웃기지 아니한가.

갈수록 온라인 상에서의 폭력이 정도를 넘어서고 있다. 제대로 된 의식 전환이 필요하다

2007/08/23

CodeIgniter 에서 객체를 수동으로 생성해서 사용하기

CodeIgniter 에서는 라이브러리나 컨트롤을 읽어들일때 자동으로 클래스를 할당하게 되므로 실제로 배열에 객체 데이터를 담을 수 없다.
 
이때 다음과 같은 파일을 만들고 쓰면 잘 된다.
 
application/system/libraries 디렉토리 밑에 beans.php 파일을 아래와 같이 만든다.
 
<pre>
&lt;?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class beans
{
    /**
     * 빈즈 이름
     *
     * @var string
     */
    var $beans_name;
   
    /**
     * 빈즈 파일을 읽어들일 기본 경로
     *
     * @var string
     */
    var $load_dir;
   
    function beans ( $dir )
    {
        // 기본적으로 Beans 를 불러들일 경로
        $this->load_dir = APPPATH . 'libraries/' . $dir . '/';
    }
   
    function load ( $beans_name )
    {
        // 불러들일 Beans 파일 포함
        include_once ( $this->load_dir . $beans_name . EXT );
    }
}
?>
</pre>
 
이 때 Beans 를 불러오는 기본 경로는 다르게 설정해주는 것이 좋다. 본인은 libraries 밑에 beans 파일을 두기로 했다.
 
그리고 다음과 같이 컨트롤러나 라이브러리에서 사용해주면 된다.
 
$this->load->library ( 'beans', 'warning' );
$this->beans->load ( 'test' );
$tester = new test ();
 
여기서는 본인이 test 라고 만든 빈즈 파일을 시험삼아 해보았으니 필요에 따라 만들면 되겠다..

2007/08/22

추억이란 상당히 재미있는 존재인듯..

정말이지. 집에 있었던 시디들이 내 기록을 얼마동안은 보존해주고 있구나.. 란 생각이 든다.
난 어렸을때 정말 어떤 사람이었던거지..
 
시디에 있는 음악들과 수 많은 파일들(그중엔 야동이라 불리는 녀석들도.. 쬐금은..). 아아하하하;;
멋적은 웃음과 함께 내 시간을 잠깐 거슬러 가봤다. 재미있는걸?

삶에서 남는것은...?

집에 있는 시디를 하나씩 뒤져보다가(물론 집에 일거리 가져와서 일하려고 했는데) 사진들을 발견했다. 그 당시 130만 화소 카메라로 이곳저곳을 찍으러 돌아다니고 나도 봤는데, 그때 내가 그런 모습을 가지고 있는지 전혀 상상도 못했다. 별짓 거리 다 했구나 ㅡㅡ; 이런 생각이 들더라
 
그래도 사진을 보니 반가웠다. 몇년동안이나 짝사랑했던 여자의 사진부터 직장 사람들까지.. 후후 이런게 추억이란건가 보다. 하긴 사람머리로 기억할 수 있는건 한계가 있겠지
그렇다 하더라도 너무 반가웠어^^

2007/08/21

국정실패라..

뉴시스 2007년 08월 21일(화) 오후 07:09 자에 다음과 같은 기사가 올라왔다.
 
한나라당 나경원 대변인은 21일 범여권을 겨냥 "대선 120일 전인 오늘까지도 우왕좌왕하는 국정실패 세력에게 '비겁하게 헛소문으로 공격하지 말고 너나 잘 하라'고 말해 주고 싶다"고 일갈했다.
그는 또 "한자릿수도 안 되는 지지율을 가진 정 전 의장이 지지율 59%의 이 후보에게 악담을 퍼붓는 것은 하룻강아지 범 무서운 줄 모르는 격"이라며 "정 전 의장이나 범여권 후보들 심정이야 국민의 절대 지지를 받는 이 후보에게 저주의 굿판이라도 벌이고 싶겠지만 그렇다고 범여권을 떠난 민심이 돌아오진 않는다"고 말했다.

그는 이어 "정 전 의장이야말로 열린우리당 창당공신이고 당 의장을 2번씩이나 지낸 국정실패의 주역으로 노무현 정권과 운명을 같이 해야 할 정치인인데도 노 대통령을 비난하고 탈당한 기회주의자"라며 "이번 대선에 출전할 명분과 자격이 없는 정치인이라는 지적이 여권 내부에서 있었다"고 비판 수위를 높였다.
 
좀 일갈해볼까나?
 
한나라당 나경원 대변인은 21일 범여권을 겨냥 "대선 120일 전인 오늘까지도 우왕좌왕하는 국정실패 세력에게 '비겁하게 헛소문으로 공격하지 말고 너나 잘 하라'고 말해 주고 싶다"고 일갈했다.
-> 여권이 비겁한건 사실이다.
 
그는 또 "한자릿수도 안 되는 지지율을 가진 정 전 의장이 지지율 59%의 이 후보에게 악담을 퍼붓는 것은 하룻강아지 범 무서운 줄 모르는 격"이라며 "정 전 의장이나 범여권 후보들 심정이야 국민의 절대 지지를 받는 이 후보에게 저주의 굿판이라도 벌이고 싶겠지만 그렇다고 범여권을 떠난 민심이 돌아오진 않는다"고 말했다.
-> 범여권 민심 떠난지 오래됐지.. 근데 하룻강아지 범 무서운 모르는 격이라. 한나라께서 그리 말씀하셔도 되나? 그럼 국가를 대표하는 대통령은 한나라께는 하룻강아지고 한나라께선 범이라는 얘기시네 그려..
 
그는 이어 "정 전 의장이야말로 열린우리당 창당공신이고 당 의장을 2번씩이나 지낸 국정실패의 주역으로 노무현 정권과 운명을 같이 해야 할 정치인인데도 노 대통령을 비난하고 탈당한 기회주의자"라며 "이번 대선에 출전할 명분과 자격이 없는 정치인이라는 지적이 여권 내부에서 있었다"고 비판 수위를 높였다.
-> 머 백번 심사 숙고해서 노무현 정권과 운명을 같이 해야 할 정치인 맞겠지. 근데 국정실패는 한나라께도 있는거 아닌가? 내가 국회에 얼마나 많은 법안이 통과되고 있는지 모르겠지만 맨날 신문엔 국회에 계류중인 민생법안 뉴스가 올라오는건 누구 탓일까나. 한나라께서도 끝까지 발목잡은 것이 있지 않은가? 도대체 서민을 위한다는게 무슨 얘기인지 모르겠다.
 
도대체 한나라 국회의원들께선 서민들께 무엇을 해주셨는고? 경제 좋지. 경제 좋아져서 나도 돈 많이 벌고 30 되기 전에 전세집 얻고 풍요롭게 결혼할 수 있을 정도가 된다면 더할 나위 없겠지. 헌데 7% 나 그거 이해가 안되. 지금 당장 올린다고 하고 후에 태클거는 사람들처럼 국가 차원에서 드는 비용은 어찌할건데? 그건 땅파서 돈을 뽑아낸다는 건가?
아 추가로 대운하도 이해가 안되. 실효성, 일자리 확대 다 좋아, 근데 말야 대운하가 지나가는데 논 하나 없애면 쌀값 올라가거든. 그리고 대대로 조상을 모셔온 사람들에게 그것도 서민들에게 무덤 옮기라고 하는게 말이 되? 그리고 대운하 파는데 지나가는길에 문화재는 어떻게 할껀데? 이후보께는 역사인식도 없나 보지? 비석 밟고 올라간건 실수로 그렇다 쳐도 문화재는 어떻게 할껀데? 아님 고속도로처럼 대운하를 문화재 피해서 돌돌 돌려서 공사할껀가? 그럼 대운하 안파는 것보다 낫지.
 
상식적으로 생각해보자. 대운하는 파나마 운하가 유명한데, 파나마 운하를 판 이유 자체가 물류 운송에 시간이 걸리기 때문이다. 한반도에서 함경도와 부산을 연결하지 않는한 굳이 대운하를 팔 이유가 있을까?
 
서울->부산간 철도 연결되어있고, 원하면 비행기로 물류수송도 가능해.
 
아 하나더 대운하 팠다 치고, 정말 재수가 없어서 대운하 한쪽이 무너지면 그 주변에 있는 민가와 밭, 사람들은 어찌할껀데? 그건 국가적인 재앙일껀데? 이건 청계천이 아니라오
뭐 사람들이 돈 하나에 미쳐서 이후보를 뽑은걸 보면 참 대단하단 생각밖에 안들어.
 
도대체 대운하 팠을때, 당장 세재 개편했을때 이익이 아니라 장기적인 이익으로 역사적으로, 국가적으로 어떤 영향을 가져올지 생각은 하는건지?
 
뭐 한나라 하시는 생각이 늘 그렇지. 아 우리나라 선거법 고쳐야 되. 이거 문제 많어 특히 온라인 홍보방법. 정말 문제 많어..
 
한나라가 아무리 달라졌다곤 해도 그대로야. 썩어빠진 정신, 소금에 절이고 새우젓에 묻힌 머리들... 후..
 
아 이런 말이 있더라.
 
"소금에 절인것은 썩지 않는다"
 
내가 잘못들었나?

2007/08/15

Windows Vista 에서 OpenVPN 으로 VPN 접속시 라우팅 문제

Windows Vista 에서 VPN 을 사용해서 회사로 접속시에 직접 명령을 치지 않고 OpenVPN 이란 프로그램을 사용해서 접속을 하는 것이 편합니다. 그런데 Windows Vista 에선 약간의 문제가 발생해서 제대로 VPN 에 연결되지 않는 문제가 발생합니다.

해결방법은 VPN 키가 있는 곳에 확장자가 ovpn 인 파일을 열어 맨 끝에 다음 2 줄을 추가해줍니다.

route-method exe
route-delay 2

그리고 접속하면 깨끗이 접속되는 걸 확인할 수 있습니다.

OpenVPN 을 사용하지 않아도 Windows Vista 사용자들은 꼭 확인해주시기 바랍니다.

세상에서 필요로 하는 것..

종이라고 하는 것은 치면 소리가 난다.
쳐도 소리가 나지 않는 것은 세상에서 버린 종이다.
또 거울이란 비추면 그림자가 나타난다. 비추어도 그림자가
나타나지 않는 것은 세상에서 내다버린 거울이다.
보통 사람이란 사랑하면 따라온다.
사랑해도 따라오지 않는 사람은 또한 세상에서 버린 사람이다.
-한용운-

지금하십시오

할일이 생각나거든 지금 하십시오.
오늘 하늘은 맑지만
내일은 구름이 보일런지 모릅니다.
어제는 이미 당신의 것이 아니니
지금 하십시오.

친절한 말 한마디 생각나거든
지금 말하십시오.
내일은 당신의 것이 안될지도 모릅니다.
사랑하는 사람은 언제나 곁에 있지는 않습니다.
사랑의 말이 있다면 지금 하십시오.

미소를 짓고 싶거든 지금 웃어주십시오.
당신의 친구가 떠나기 전에
장미는 피고 가슴이 설레일 때
지금 당신의 미소를 주십시오.

불려야 할 노래가 있다면 지금 부르십시오.
당신의 해가 저물면 노래부르기엔
너무나 늦습니다.
당신의 노래를 지금 부르십시오.
--
놀부에서 제작해서 배부하는 글입니다.

2007/08/14

CodeIgniter 에서 PEAR 라이브러리 사용하기

CodeIgniter 는 단 시간내에 빠른 개발 방법을 지원하는 경량급 PHP 프레임워크인데, 모든 것을 이 안에서 다 제공하다 보니 하나의 문제가 생겼다. 바로 외부에 존재하는 수 많은 라이브러리의 사용이 그것이다.

이 글은 PHP 에서 지원하는 PEAR 라이브러리를 CodeIgniter 에서 사용하는 방법을 다룬다.

CodeIgniter 에서 Pear 를 사용하기 위해선 6 가지의 절차를 거쳐야 한다.

우선 config/config.php 파일을 열어서 아래처럼 바꿔준다.

$config['enable_hooks'] = FALSE; ☞ $config['enable_hooks'] = TRUE

그리고 같은 디렉토리 아래 hooks.php 파일을 열어 파일의 맨 끝(PHP 선언이 끝나기 전에 있는 라인)에 다음 내용을 추가해준다.


$hook['pre_controller'][] = array (
'class' => 'Pear_hook',
'function' => 'index',
'filename' => 'pear_hook.php',
'filepath' => 'hooks'
);


이제 hook 을 작성할 차례이다. application 아래에 hooks 디렉토리로 이동해 다음 이름으로 파일을 작성한다.

파일 이름 : pear_hook.php

<?php if ( !defined ( 'BASEPATH' )) exit ( 'No direct script access allowed' );
class Pear_hook
{
function index ()
{
// on Apache
// ini_set ( 'include_path', ini_get ( 'include_path' ) . ':' . BASEPATH . 'application/web/pear/' );
ini_set ( 'include_path', ini_get ( 'include_path' ) . ':' . BASEPATH . 'application/web/pear/' );
}
}
?>


여기까지 따라왔으니 이제 3단계만 더 거치면 PEAR 를 원활하게 사용할 수 있다. application/libraries 디렉토리로 이동해 아래 파일을 작성한다.

파일 이름 : Pearloader.php

<?php if ( !defined ( 'BASEPATH' )) exit ( 'No direct script access allowed' );
class PearLoader
{
function load ( $package, $class, $options = null )
{
require_once ( $package . '/' . $class . '.php' );
if ( strpos ( $package, '/' ) ) $package = str_replace ( '/', '_', $package );
$classname = $package . "_" . $class;
if ( is_null ( $options ) )
{
return new $classname ();
}
else
{
return new $classname ( $options );
}
}
}
?>


여기까지가 CodeIgniter 에서 Pear 라이브러리를 사용하기 위해 준비를 한 것이다. 이제 최종 단계가 2단계 남아있는데, 따라하자.

하나는 실제 사용할 PEAR 라이브러리와 PEAR.php 파일의 복사가 필요하다.

PEAR.php 파일은 PEAR 가 설치된 경로에 가면 있으니 application 디렉토리 아래 pear 라는 디렉토리를 만들어 복사하고, 실제 사용할 PEAR 라이브러리는 pear.php 에서 받아서 pear 디렉토리 아래에 넣어두면 된다.

이때 사용할 PEAR 라이브러리의 디렉토리명과 클래스명을 잘 파악해둬야 한다(물론 사용하기 위해 불러들이는 파일 하나만에 대해서다).

내 경우 Spreadsheet_Excel_Writer 라는 클래스를 사용해야 하는데, pearloader.php 에서 클래스를 동적으로 할당할 경우 다음과 같이 넘기면

$this->pearloader->load ( 'Spreadsheet/Excel', 'Writer' );

파일은 제대로 포함하지만 클래스는 할당되지 못한다. 이런 경우를 위해 pearloader 클래스에서 동적 클래스 할당전에 약간의 트릭을 사용해서 동적할당이 가능하게 하였다.

사용할 PEAR 라이브러리를 모두 위치했다면 이제 사용할 차례이다.

PEAR 라이브러리를 사용할 Controller 나 Model 등에서 다음과 같이 사용한다.

$this->load->library ( 'pearloader' );
$http_request = $this->pearloader->load('HTTP','Request');
$http_request->setURL($url);
$http_request->sendRequest();
echo $http_request->getResponseBody();

끝.. 헉헉.. 글 쓰기 힘들다. CodeIgniter 를 제대로 활용하기 위한 것도 꽤 힘들다..

Codeigniter 에서 세션 사용하기

CodeIgniter 에서 제대로 세션이 동작되지 않는 경우가 있다.

난 비록 얼마 사용하지 않았지만.. 이번에 좀 큰 시스템을 개발 중인데 이같은 문제가 발생해 난감해 하던차에 구글을 뒤져 다음과 같은 코드로 바꿔치기 하면 된다는 사실을 알았다.

단 이때 코드는 system/libraries 에 있는 Session.php 를 다른 이름으로 바꾸고 그 다음에 아래 내용을 Session.php 로 저장해서 넣으면 된다.

즐거운 CodeIgniter 생활이 되기를..


<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Code Igniter
*
* An open source application development framework for PHP 4.3.2 or newer
*
* @package CodeIgniter
* @author Dariusz Debowczyk
* @copyright Copyright (c) 2006, D.Debowczyk
* @license http://www.codeignitor.com/user_guide/license.html
* @link http://www.codeigniter.com
* @since Version 1.0
* @filesource
*/

// ------------------------------------------------------------------------

/**
* Session class using native PHP session features and hardened against session fixation.
*
* @package CodeIgniter
* @subpackage Libraries
* @category Sessions
* @author Dariusz Debowczyk
* @link http://www.codeigniter.com/user_guide/libraries/sessions.html
*/
class CI_Session {

var $flash_key = 'flash'; // prefix for "flash" variables (eg. flash:new:message)

function CI_Session()
{
$this->object =& get_instance();
log_message('debug', "Native_session Class Initialized");
$this->_sess_run();
}

/**
* Regenerates session id
*/
function regenerate_id()
{
// copy old session data, including its id
$old_session_id = session_id();
$old_session_data = $_SESSION;

// regenerate session id and store it
session_regenerate_id();
$new_session_id = session_id();

// switch to the old session and destroy its storage
session_id($old_session_id);
session_destroy();

// switch back to the new session id and send the cookie
session_id($new_session_id);
session_start();

// restore the old session data into the new session
$_SESSION = $old_session_data;

// update the session creation time
$_SESSION['regenerated'] = time();

// session_write_close() patch based on this thread
// http://www.codeigniter.com/forums/viewthread/1624/
// there is a question mark ?? as to side affects

// end the current session and store session data.
session_write_close();
}

/**
* Destroys the session and erases session storage
*/
function destroy()
{
unset($_SESSION);
if ( isset( $_COOKIE[session_name()] ) )
{
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
}

/**
* Reads given session attribute value
*/
function userdata($item)
{
if($item == 'session_id'){ //added for backward-compatibility
return session_id();
}else{
return ( ! isset($_SESSION[$item])) ? false : $_SESSION[$item];
}
}

/**
* Sets session attributes to the given values
*/
function set_userdata($newdata = array(), $newval = '')
{
if (is_string($newdata))
{
$newdata = array($newdata => $newval);
}

if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
$_SESSION[$key] = $val;
}
}
}

/**
* Erases given session attributes
*/
function unset_userdata($newdata = array())
{
if (is_string($newdata))
{
$newdata = array($newdata => '');
}

if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
unset($_SESSION[$key]);
}
}
}

/**
* Starts up the session system for current request
*/
function _sess_run()
{
session_start();

$session_id_ttl = $this->object->config->item('sess_expiration');

if (is_numeric($session_id_ttl))
{
if ($session_id_ttl > 0)
{
$this->session_id_ttl = $this->object->config->item('sess_expiration');
}
else
{
$this->session_id_ttl = (60*60*24*365*2);
}
}

// check if session id needs regeneration
if ( $this->_session_id_expired() )
{
// regenerate session id (session data stays the
// same, but old session storage is destroyed)
$this->regenerate_id();
}

// delete old flashdata (from last request)
$this->_flashdata_sweep();

// mark all new flashdata as old (data will be deleted before next request)
$this->_flashdata_mark();
}

/**
* Checks if session has expired
*/
function _session_id_expired()
{
if ( !isset( $_SESSION['regenerated'] ) )
{
$_SESSION['regenerated'] = time();
return false;
}

$expiry_time = time() - $this->session_id_ttl;

if ( $_SESSION['regenerated'] <= $expiry_time )
{
return true;
}

return false;
}

/**
* Sets "flash" data which will be available only in next request (then it will
* be deleted from session). You can use it to implement "Save succeeded" messages
* after redirect.
*/
function set_flashdata($key, $value)
{
$flash_key = $this->flash_key.':new:'.$key;
$this->set_userdata($flash_key, $value);
}

/**
* Keeps existing "flash" data available to next request.
*/
function keep_flashdata($key)
{
$old_flash_key = $this->flash_key.':old:'.$key;
$value = $this->userdata($old_flash_key);

$new_flash_key = $this->flash_key.':new:'.$key;
$this->set_userdata($new_flash_key, $value);
}

/**
* Returns "flash" data for the given key.
*/
function flashdata($key)
{
$flash_key = $this->flash_key.':old:'.$key;
return $this->userdata($flash_key);
}

/**
* PRIVATE: Internal method - marks "flash" session attributes as 'old'
*/
function _flashdata_mark()
{
foreach ($_SESSION as $name => $value)
{
$parts = explode(':new:', $name);
if (is_array($parts) && count($parts) == 2)
{
$new_name = $this->flash_key.':old:'.$parts[1];
$this->set_userdata($new_name, $value);
$this->unset_userdata($name);
}
}
}

/**
* PRIVATE: Internal method - removes "flash" session marked as 'old'
*/
function _flashdata_sweep()
{
foreach ($_SESSION as $name => $value)
{
$parts = explode(':old:', $name);
if (is_array($parts) && count($parts) == 2 && $parts[0] == $this->flash_key)
{
$this->unset_userdata($name);
}
}
}
}
?>

codeigniter library 에서 객체 사용하기

codeigniter 의 library 를 사용자가 임의로 생성할 때 Controller나 Model, View 처럼 모든 상속된 객체를 생성할 순 없게 되어 있다.

따라서 library 에선 다음과 같이 codeigniter 의 모든 객체를 사용할 수 있도록 해주어야 한다.

$obj =& get_instance ();

위와 같이 하면 Controller 나 Model 등에서 다음과 같이 사용하는 것처럼 할 수 있다.

Controller:

$this->session->userdata ( 'id' );

Library:

$obj->session->userdata ( 'id' );

위처럼 사용하면 된다. 다만 library 의 모든 메소드에서 객체를 사용하는 것일 경우 객체의 변수에 담아 다음과 같이 사용할 수 있는 방법도 있겠다.

$this->obj =& get_instance ();

$this->obj->session->userdata ( 'id' );

나머진 취향에^^