본문 바로가기

Common Gateway Interface/Perl

[옛 강좌] 35. Perlprog - Bookmark Program

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 이 게시물은 지금은 폐쇄되어 접속되지 않는 Kim Young Soo(http://hours.interpia98.net/~unisoo/)님의 웹 사이트에 2001년경 게시된 내용을 바탕으로 오늘날 웹 환경에 맞게 내용을 덧붙였습니다.

Perlprog - Bookmark Program

Description

Perl과 DB를 이용한 Bookmark Program 두 번째


해당 디렉토리의 URL 보여주기(Search Data)

 죄송하다는 말씀 먼저 드립니다. 첫번째에 이어서 두번째가 넘 늦게 올라 왔습니다. 이유는.... ^^; 제가 넘 게으른 탓에..... 두 번째 이야기 나갑니다.

 저번엔 데이터의 기본 골격을 갖추었고, 기본 카테고리를 몇 개 넣었습니다.(이건 여러분이 직접 해주셔야 하는거 아시죠? 웹에서 할 수 있는건 나중에 다룹니다.) 또, 우선은 수작업으로, 기본 카테고리 밑에 몇 개의 URL을 직접 등록 시켜주셔야 합니다. 우선 목록을 보여주는 프로그램을 먼저 만들어야 하거든요. 그럼 시작합니다.


선행작업(Start)

 처음엔 좀 불편하지만요, 프로그램이 완성되기 전까지, 몇 가지는 직접 손으로 하셔야 하는 작업이 있습니다. 프로그램이 제대로 움직이는지 확인하는 과정까지 포함해서요. 그 중 하나가 처음에 index.cgi와 해당 URL을 제대로 찾아주는 지의 search.cgi가 제대로 움직이는지 확인 해야져. 그렇기 때문에, 기본적으로 테스트 할 디렉토리와 그에 상응하는 URL 몇 개를 직접 추가해 주시기 바랍니다. 아래의 방법대로 하시면 되요.

디렉토리 추가하기(Directory)

 아래의 query 문을 데이터베이스에서 직접 해 주세요.

insert into bookmark(type, path, name) values ('f', '/', 'Perl_관련_홈페이지')

이렇게 하시면, 북마크의 종류를 구분짓는 최상위 디렉토리가 하나 생기는 겁니다.(지난 강좌를 보세요) 이런 식으로 몇 개를 추가해서, 기본 디렉토리를 몇 개 만드시면 됩니다.

해당 디렉토리의 URL 추가하기(Directory_URL)

아래의 query문을 데이터베이스에 직접 명령해 주세요.

insert into bookmark (type, parent, path, name, url, owner, descript, search)  values ('b', '/', 'Perl_관련_홈페이지', 'Perl Programming Home Page!!!', 'user.chollian.net/~unisoo', '김영수', '이 사이트의 설명', '검색어')

해당 데이터 보여주기(search.cgi)

 그럼 search.cgi 라는 이름으로 시작합니다.

#!/usr/local/bin/perl
# CGI, DBI 모듈을 사용한다고 알리구요.
use CGI;
use DBI;

$search = new CGI;
print $search->header;

# index.cgi를 보시면, <a href=\"./search.cgi/$name/\">$name</a>
# 이렇게 링크가 되어 있는걸 보실수 있습니다. 이렇게 넘어오는 데이터를 (path가 포함되서 넘어 오겠죠. 예: /Perl_관련_홈페이지/) 이렇게 넘어오게 됩니다.
# 여기서 다른 건 다 걸러네고, 디렉토리명만 추려냅니다.
# 한 번에 처리해도 되지만, 세부적으로 나누었습니다.
$search_folder = $ENV{'PATH_INFO'};
$search_folder =~ s/^\///;
$search_folder =~ s/\/$//;

# 디비에 접속 합니다.
$dbh = DBI->connect('DBI:ODBC:bookmark', 'sa', '') || die print "$DBI::errstr";

# query문을 준비하고, 실행합니다.
# 우리가 필요한 데이터는 그 디렉에 관계된거만 있으면 되니깐요, 고것만.
$sth = $dbh->prepare( q{select * from bookmark where path=?} ) || die print "$DBI::errstr";
$sth->execute($search_folder);

# 머리부분을 출력합니다. (아래에 설명 참조)
&HtmlStart($search_folder);

# 우리가 필요한 출력형식에 맞춰서 출력을 해줍니다.
# 아래의 코드가 이해가 되지 않으신다면, 이곳 홈의 모듈 설명을 참고 하세요.
# 데이터의 type 이 'b'인지를 검사하는 것은, 이 디렉토리 밑에 또 다른 디렉토리가 있을 수도 있기 때문입니다.
while (@search_result = $sth->fetchrow_array)
{
	if ($search_result[0] eq 'b')
	{
		print "<li><a href=\"http://$search_result[4]\" target=new_blank>$search_result[3]</a><br>";
		print "$search_result[6]<p>\n";
	}
}

# 마지막 부분을 출력합니다.
&HtmlEnd;

# 디비와의 통신을 끊습니다.
$sth->finish;
$dbh->disconnect;
				

 아래는 서브 함수의 정의 입니다.

HtmlStart()

현재의 폴더 이름을 받아서 같이 출력해 줍니다.

sub HtmlStart
{
	my ($now_folder) = @_;
	
	print << Html;
<html>
<head>
<title>BlackUnicorn's BookMark Site</title>
</head>

<body>
<center>
<b><font size=3 color=green>My Favorite Site!!!</font></b><p>
</center>
<font size=2>
<a href="http://localhost/~bookmark/">처음</a> > <a href="http://localhost/~bookmark/search.cgi/$now_folder/">$now_folder</a>
<a href="http://localhost/~bookmark/search.cgi/">http://localhost/~bookmark/search.cgi/</a>$now_folder/">$now_folder</a>
<hr size=2 color=green width=100%>
<ul type=disc>
    Html

    }
					

HtmlEnd()

 아래의 링크에 보이는 add.cgi는 다음에 하겠습니다.

sub HtmlEnd
{
	print << End;
</ul>
<hr size=2 color=green width=100%>
<center>
<a href="http://localhost/~bookmark/"><font color=blue>BlackUnicorn's BookMark Site</font></a> - 
<a href="http://localhost/~bookmark/add.cgi?path=$search_folder">북마크 등록</a>
</center>
</font>
</body>
</html>
    End
}
					

NOTES

 저장되어 있는 데이터에서 우리가 선택한 디렉토리의 하부 URL을 추출하는 프로그램을 이야기 하였습니다. 다음엔 사용자가 직접 URL을 등록할수 있는 북마크 추가 프로그램에 대해 이야기 하겠습니다.

이 문서는 Perl 패키지내의 pod2html를 이용하여 만들었습니다. - Kim Young Soo