날짜: 1996-07-02 | 글쓴이: 도아 | 7038 번 | 프린트 | 메일로보내기

제 2강 - CGI.pm의 사용방법


프로그래밍 스타일

CGI.pm으로 프로그램을 작성할때에는 두가지 프로그래밍 스타일, 즉 개체 지향 스타일함수 지향 스타일을 사용할 수 있다. 개체 지향 스타일에서는 하나 이상의 CGI 개체를 생성하고 페이지의 다양한 요소를 생성하기위해 메소드를 사용한다. 각각의 CGI 개체는 서버에의해 CGI로 전달된 기명 매개변수의 목록으로 초기화 된다. 사용자는 이 개체를 변경하고 이들을 파일이나 데이타 베이스에 저장하고 또 이들을 다시 생성할 수 있다. 각 개체는 CGI의 "상태"와 상응하며 각각의 개체의 매개변수 목록은 서로 독립적이기 때문에 이들을 이용해서 스크립트의 상태를 저장하고 나중에 다시 복구할 수 있다.

예로서 개체 지향 스타일을 사용해서 "안녕, 깜직아"를 출력하는 HTML 페이지를 만들어 보자.

1 : #!/usr/local/bin/perl
2 : use CGI;				# CGI 모듈을 읽어 들인다.
3 : $q = new CGI;			# 새로운 CGI 개체를 생성한다.
4 : print $q->header,			# HTTP 해더를 생성한다.
5 : 	$q->start_html('간단한 예'),	# HTML을 시작한다.
6 : 	$q->h1('안녕, 깜찍아'),		# H1 태그로 "안녕 깜찍아"를 출력한다.
7 : 	$q->end_html;			# HTML을 닫는다.
실행 결과

example2.cgi

함수 지향 스타일에서는 하나의 기본 CGI 개체만 존재하며, 이 개체가 직접 사용되는 것은 아주 드물다. 개체를 사용하는 대신에 CGI 매개변수를 복원하고 HTML 태그를 생성하고 쿠키를 처리하기위해 함수를 호출한다. 이 방법은 보다 분명한 프로그래밍 환경을 제공해 주지만 한번에 하나의 CGI 개체만 사용해야하는 제약이 있다. 다음 예는 위의 예와 동일한 예이지만 함수 지향 환경을 사용하고 있다. 주된 차이는 함수의 집합을 이름 공간(보통 표준 함수)로 가져오기만 하면 된다는 것이다. 굳이 개체를 생성할 필요는 없다.

1 : #!/usr/local/bin/perl
2 : use CGI qw/:standard/;	# CGI 모듈을 읽어 들인다.
3 : print header,		# HTTP 해더를 생성한다.
4 : 	start_html('간단한 예'),# HTML을 시작한다.
5 : 	h1('안녕, 깜찍아'),	# H1 태그로 "안녕 깜찍아"를 출력한다.
6 : 	end_html;		# HTML을 닫는다.
실행 결과

example3.cgi

이 문서의 예는 주로 개체 지향 스타일을 사용했다. CGI.pm에서 함수 지향 스타일에대한 중요한 정보는 함수 지향 환경을 사용하기를 보기바란다. CGI.PM 루틴의 호출

대부분의 CGI.pm 루틴은 여러가지 인자를 받아들인다. 때때로 20개 이상의 인자를 받아들이는 경우도 있다. 이러한 것을 간단히 하기위해 모든 루틴은 다음과 같이 기명 인자 호출 법을 사용한다.

print $q->header(-type=>'image/gif',-expires=>'+3d');

각각의 인자 이름은 대쉬(-) 다음에 나온다. 인자 목록에서 대소문자는 구분하지 않으며 순서 역시 구분하지 않는다. 즉, -type, -Type, -TYPE 모두 사용할 수 있다. 사실 첫번째 인자만 대쉬(-)로 시작해도 된다. 첫 번째 인자에 대쉬(-)가 존재하면 CGI.pm은 이어지는 인자도 대쉬가 있는 것으로 가정한다.

대쉬를 사용하고 싶지 않다면 대쉬를 전혀 사용하지 않아도 된다. 개체를 생성한 후 "0"이 아닌 값으로 use_named_parameters()를 호출함으로서 기명 인자 호출을 사용하지 않겠다는 것을 CGI.pm에 알려줄 수 있다.

$query = new CGI;
$query->use_named_parameters(1);
$field = $query->radio_group('name'=>'OS',
	'values'=>['유닉스','윈도그','맥킨토시'],
	'default'=>'유닉스');

여러 루틴들은 통상 하나의 인자로 호출된다. 이러한 루틴의 경우에는 인자 이름 없이 하나의 인자만 주면 된다.

header()
는 이러한 루틴들 중 하나이다. 이 경우에 하나의 인자는 문서의 유형이다.

print $q->header('text/html');

다른 이러한 루틴들은 아래에 문서화되어 있다.

때때로 기명 인자들은 스칼라를 참조하며, 가끔 배열이나 연관배열을 참조한다. 어떠한 형태의 인자든지 전달할 수 있으며, 루틴은 전달된 인자가 무엇이든 가장 적당하게 처리한다. 예를들어

param()
루틴은 하나 또는 여러 개의 값으로 CGI 매매변수를 설정하는데 사용된다. 다음은 이 두 경우에대한 예이다.

$q->param(-name=>'veggie',-value=>'토마토');
$q->param(-name=>'veggie',-value=>['토마토','상치','감자','고구마']);

CGI.pm의 아주 많은 루틴들은 모듈내에 특별히 정의되지 않았지만 필요시 자동적으로 생성된다. 이들은 동적으로 HTML 페이지를 만드는데 사용되는 "HTML 메소드"들이다. HTML 태그는 속성(태그 자체내에서 사용되는 속성=값의 쌍)과 내용(시작 태그와 종료태그 사이에 존재하는 내용)을 모두 갖는다. 속성과 내용을 구분하기위해 CGI.pm은 첫번째 인자를 연관배열로 참조함으로서 HTML 속성을 전달하며 이어지는 인자는 내용을 참조한다.

코드				생성된 HTML
----				--------------
h1()				<H1>
h1('무슨','내용일까?');		<H1>무슨 내용일까?</H1>
h1({-align=>left});		<H1 ALIGN="LEFT">
h1({-align=>left},'내용');	<H1 ALIGN="LEFT">내용</H1>

HTML 태그는 나중에 보다 자세히 설명하겠다.

CGI.pm을 처음 사용하는 사람들은 HTML 태그 관련 함수의 호출 규칙(HTML 태그 속성을 중괄호로 감싸는)과 다른 루틴의 호출 규칙(중괄호 없이 속성을 만드는) 사이의 차이 때문에 혼란스러울 것이다. 혼란스러워할 필요는 없다. 중괄호는 모두 옵션이다. 만약 원한다면 기명 인자를 취하는 임의의 루틴을 호출할 때 중괄호를 사용할 수 있다. 예를들어:

print $q->header( {-type=>'image/gif',-expires=>'+3d'} );

-w 스위치를 사용한다면 몇몇 CGI.pm 인자의 이름이 내장된 펄 함수와 충돌을 일으킨다는 경고를 보게될 것이다. 이들중 가장 빈번한 것은 다중 값을 갖는 메뉴(레디오 버튼과 같은)를 생성하는데 사용되는 -values 인자이다. 이 경고를 우회하기위해서는 여러가지 방법이 있다.

  1. 가능하다면 다른 이름을 사용한다. 예를들어 -value는 -values의 별칭이다.
  2. 대소문자를 변경한다. 예: -Values
  3. 인자 이름을 작은 따옴표로 감싼다. 예: '-values'

많은 루틴들에서 루틴이 인식하지 못하는 기명 인자를 사용할 수 있다. 예를들어 인식히지 못하는 인자를 루틴에 제공함으로서 비표준 HTTP 헤더 필드를 생성할 수 있다.

print $q->header(-type  =>  'text/html',
	-cost  =>  'Three smackers',
	-annoyance_level => 'high',
	-complaints_to   => 'bit bucket');

이 예는 다음과 같은 비표준 HTTP 헤더를 만든다.

HTTP/1.0 200 OK
Cost: Three smackers
Annoyance-level: high
Complaints-to: bit bucket
Content-type: text/html

밑줄은 자동적으로 대쉬(-)로 변환된다는 것에 주의하기 바란다. HTML 생성 루틴은 다른 형태의 변환을 수행한다.

이러한 특징으로 빠르게 변하는 HTTP와 HTML 표준을 유지할 수 있다. 새로운 질의개체 생성하기(개체 지향 스타일)

$query = new CGI;

이 것은 입력(POST와 GET 메소드)을 해석하고 그 결과를 $query라는 펄5 개체로 저장한다. 입력 파일로부터 새로운 질의개체 생성하기

$query = new CGI(INPUTFILE);

new()
메소드에 파일핸들을 제공하면 파일(또는 STDIN이나 무엇이든)로부터 매개변수를 읽는다. 이 파일은 디버깅환경을 위해 저장된 임의 형식의 파일일 수 있다(예: 개행문자가 제거된 일련의 TAG=VALUE 쌍). 편의를 위해 이 파일은
save()
메소드에의해 생성되는 것으로 하자. 여러행을 갖는 매개변수도 저장, 복원될 수 있다.

펄 추종자들은 파일핸들의 참조나 심지어는 파일핸들 묶음(glob: 파일핸들을 전달하는 공식적인 방법)을 참조할 수 있다것을 알면 즐거워 할 것이다.

$query = new CGI(\*STDIN);

또한 CGI 개체를 FileHandle나 IO::File 개체로 초기화할 수도 있다.

함수 지향 스타일을 사용하고 파일로부터 CGI 상태를 초기화하려면 restore_parameters()를 사용해야 한다. 이 것은 지정한 파일 핸들로부터 기본 CGI 개체를 (재)초기화 할 것이다.

open (IN,"test.in") || die;
restore_parameters(IN);
close IN;

연관배열 참조로 질의개체를 초기화할 수 있다.

$query = new CGI( {'dinosaur'=>'쥬라기 공원',
		'song'=>'널 사랑해',
		'friends'=>[qw/세상 모든 여자/]}
	);

또한 적당히 형식화된 입력으로부터 질의개체를 초기화할 수 있다. URL에서 추출한 질의 문자열도 가능하다.

$query = new CGI('dinosaur=barney&color=purple');

마지막으로 이전에 존재한 CGI 개체로부터 초기화하는 것도 가능하다(현재 이 것은 매개변수 목록의 사본이다).

$old_query = new CGI;
$new_query = new CGI($old_query);

빈 질의를 생성하기위해 공백문자열이나 공백 해쉬로 초기화할 수 있다.

$empty_query = new CGI("");

또는

$empty_query = new CGI({});
질의로부터 키워드의 목록 가져오기

@keywords = $query->keywords

스크립트가 <ISINDEX> 검색의 결과로서 호출되었다면 해석된 키워드는

keywords()
메소드를 사용해서 얻을 수 있다. 스트립트에 전달된 모든 매개변수의 이름 가져오기

@names = $query->param

스크립트가 매개변수 목록(예: "name1=value1&name2=value2&name3=value3")으로 호출되었다면

param()
메소드는 매개변수의 이름을 배열로 리턴할 것이다. 스크립트가 <ISINDEX>로 호출되었다면 'keywords'라는 하나의 매개변수가 리턴된다.

주의: 1.5 판에서 처럼 리턴된 매개변수 이름 배열은 브로우저에의해 제출된 순서와 동일한 순서로 저장된다. 보통 이 순서는 매개변수를 폼에서 정의한 순서와 같다(그러나 이 것이 표준은 아니며 따라서 어떠한 것도 보증할 수는 없다). 하나의 기명 매개변수의 값(들) 가져오기

@values = $query->param('foo');

또는

$value = $query->param('foo');

기명 매개변수의 값을 가져오기위해

param()
메소드에 하나의 인자를 전달한다. 매개변수가 다중 값을 가지고 있다면(선택 목록의 다중선택) 배열로 받을 수 있다. 그렇지 않다면 이 메소드는 하나의 값을 리턴한다. 기명 매개변수 값의 설정

$query->param('foo','임의의','배열의','값');

이 것은 리스트로 'foo'라는 매개변수의 값을 설정한다. 이 것이 스크립트가 일단 호출된 후 필드의 값을 변경하는 한 방법이다.(또 다른 방법은 모든 메소드에의해 허용되며 폼 요소를 생성하는데 사용되는 -override 매개변수이다.)

param()
는 또한 기명 매개변수 스타일의 호출을 인식한다. 나중에 자세히 설명하겠다.

$query->param(-name=>'foo',-values=>['임의의','배열의','값']);

또는

$query->param(-name=>'foo',-value=>'해당 값');
매개변수에 값을 추가하기

$query->append(-name=>'foo',-values=>['그러나','더많은','값']);

이 것은 값이나 값의 목록을 매개변수에 추가한다. 매개변수가 존재하는 경우 값들은 매개변수의 끝에 덧붙여진다. 그렇지 않으면 매개변수가 생성된다. 이 방법은 단지 기명 인자 호출 형식만 인식한다는 것에 주의하기 바란다. 모든 매개변수를 이름공간으로 가져오기

$query->import_names('R');

'R'이라는 이름 공간에 일련의 변수들을 생성한다. 예를들면 $R::foo, @R:foo와같은 것들이다. 키워드 목록의 경우 @R::keywords가 된다. 어떠한 이름도 주지 않으면 이 메소드는 'Q'라는 이름 공간으로 변수를 가져온다.

경고: 'main'을 이용해서는 어떠한 것도 가져와서는 안된다. 이 것은 심각한 보안 문제를 일으킬 수 있다.

이전 판에서 이 메소드는 import()라고 불렸다. 2.20판에서처럼 이 이름은 내장될 펄의 모듈, import와의 충돌을 막기위해 완전히 제거되었다. 매개변수를 완전히 제거하기

$query->delete('foo');

이 것은 매개변수를 완전히 제거한다. 이것은 때때로 스크립트에서 스크립트를 호출하면서 매개변수가 전달되지 않도록 매개변수를 재설정할 때 아주 유용하다.

함수 호출환경을 사용한다면, 펄에 내장된 delete 연산자와의 충돌을 피하기위해 "Delete()"를 사용한다. 모든 매개변수를 삭제하기

$query->delete_all();

이 것은 CGI 개체를 완전히 삭제한다. 폼문서를 생성하면서 모든 기본값이 확실히 취해지도록 할 때 유용할 것이다.

함수 호출 환경을 사용한다면 대신에

Delete_all()
를 사용한다. 매개변수 목록에 직접 접근하기

$q->param_fetch('address')->[1] = '태백산맥';
unshift @{$q->param_fetch(-name=>'address')},'조정래';

위에서 설명하지 않은 방법으로 매개변수 목록에 접근할 필요가 있다면 매개변수 이름으로 param_fetch() 메소드를 호출함으로서 직접 값을 참조할 수 있다. 이 것은 매개변수의 배열을 리턴하며 원하는 임의의 방법으로 이들을 처리할 수 있다.

-name를 사용해서 기명 인자 형식을 사용할 수도 있다. 스크립트의 상태를 파일로 저장하기

$query->save(FILEHANDLE)

이 것은 폼의 현재 상태를 주어진 파일 핸들로 저장한다.

new()
메소드에 파일핸들을 제공함으로서 이 상태를 다시 읽을 수 있다. 파일핸들은 파일, 파이프 또는 무엇이든 가능하다는 것에 주의하기 바란다.

저장된 파일의 형식은 다음과 같다.

NAME1=VALUE1
NAME1=VALUE1
NAME2=VALUE2
NAME3=VALUE3
=

이름과 값은 URL에서 특수문자가 제거된 형식이다. 다중 값을 갖는 CGI 매개변수는 반복적인 이름으로 표현된다. 각각의 기록은 하나의 =에의해 분리된다. 또한 이러한 상태를 여러번 쓰고 new를 여러번 호출함으로서 이들을 다시 읽을 수 있다. 추가 모드로 파일을 오픈함으로서 여러 세션을 저장할 수 있다. 이 방법으로 간단한 방명록을 작성할 수 있으며 사용자의 질의 목록을 유지할 수 있다. 여기 다중 세션 기록을 생성하는 짧은 예가 있다.

 1 : #!/usr/local/bin/perl
 2 : use CGI;
 3 : 
 4 : open (OUT,">>./save/test.txt") || die;
 5 : $records = 5;
 6 : foreach (0..$records) {
 7 : 	my $q = new CGI;
 8 : 	$q->param(-name=>'counter',-value=>$_);
 9 : 	$q->save(OUT);
10 : }
11 : close OUT;
12 : 
13 : $q = new CGI;
14 : # 읽기위해 다시 파일을 연다.
15 : print $q->header, $q->start_html, $q->pre;
16 : 
17 : open (IN,"./save/test.txt") || die;
18 : while (!eof(IN)) {
19 : 	my $q = new CGI(IN);
20 : 	print $q->param('counter'),"\n";
21 : }
22 : 
23 : print $q->pre, $q->end_html;
실행결과

count.cgi 저장결과

test.txt

저장/복원에서 사용된 파일 형식은 Whitehead Genome Center의 데이타 교환형식, "Boulderio"에의해 사용된 것과 동일하며 Boulderio 유틸리티를 사용해서 조작, DB화 될 수 있다. 보다 자세한 것은 BOULDER 을 보기 바란다.

함수 지향 환경에서 이 방법을 사용하려면 save_parameters()을 사용한다. 함수 지향 환경을 사용하기

함수 지향 환경을 사용하기위해 이름 공간으로 가져올 루틴이나 루틴의 집합을 지정해야 한다.

use CGI <메소드의 목록>;

이 방법은 메소드의 목록을 현재의 패키지로 가져오게된다. CGI 개체를 생성하지 않고 직접 이들을 호출할 수 있다. 이 예는 param()header()를 가져오는 방법과 이들을 직접 사용하는 방법을 보이고 있다.

use CGI 'param','header';
print header('text/plain');
$zipcode = param('zipcode');

이름에의해 그룹지어진 함수을 공통집합을 가져오는 경우가 많을 것이다. 모든 함수 집합은 ":html3"('HTML 3 표준에 정의된 태그)처럼 ":" 문자로 시작된다.

여기 가져올 수 있는 함수 집합의 목록이 있다.

:cgi
param(), path_info()와 같은 CGI를 처리하는 모든 메소드를 가져온다.

:form
textfield()와 같이 폼을 생성하는 메소드를 가져온다.

:html2
HTML 2.0의 표준 태그를 생성하는 모든 메소드를 가져온다.

:html3
HTML 3.0에서 제안된 태그(<table>, <super>와 <sub>와 갈은)를 생성하는 모든 메소드를 가져온다.

:netscape
넷스케잎에서 정의한 HTML 확장을 생성하는 모든 메소드를 가져온다.

:html
모든 HTML 태그(예:'html2' + 'html3' + 'netscape')를 생성하는 메소드를 가져온다.

:standard
표준 특징, 'html2', 'html3', 'form'과 'cgi'을 가져온다.

:all
사용할 수 있는 모든 메소드를 가져온다. 완전한 목록은 %TAGS가 정의된 CGI.pm의 코드를 본다.

CGI.pm에서 지원하지 않는 함수명을 가져온다면 CGI.pm은 이 것을 새로운 HTML 태그로 처리하며 적당한 서브루틴을 생성한다. 그리고 나서 이 것을 다른 HTML 태그와 같이 사용할 수 있다. 이 것은 급속도로 변하는 HTML 표준을 위해 제공된다. 예를들어 Money$fot는 <GRADIENT>라는 새로운 태그(컴퓨터를 다시 부팅할 때까지 사용자의 데스크탑의 색상을 주기적으로 변경하는)을 발표했다. 이 것을 사용하기위해 CGI.pm의 새버전을 기다릴 필요없이 다음과 같은 방법을 사용하면 된다.

use CGI qw/:standard :html3 gradient/;
print gradient({-start=>'red',-end=>'blue'});

주의: CGI.pm의 실행속도에 관심이 있다면 읽을 심볼을 지정하는 표준 Exporter 형식을 사용하지 말기 바란다. 이 것은 앞으로 변경될 것이다.

임의의 상태 유지 CGI를 가져오거나 폼을 생성하는 메소드를 가져오면 기본 CGI 개체가 생성되며 임의의 메소드를 처음 사용할 때 자동적으로 초기화된다. 이러한 것에는 param(), textfield(), submit()와 같은 것들이 있다(CGI 개체를 직접 접근하려면 전역 변수, $CGI::Q를 사용한다). CGI.pm의 메소드를 가져옴으로서 보기에 훨씬 우아한 스크립트를 작성할 수 있다.

 1 : #!/usr/local/bin/perl
 2 : # 폼문서를 생성하며 
 3 : # 폼의 입력을 다시 출력하는 CGI
 4 : use CGI qw/:standard/;
 5 : print header,
 6 : 	start_html('간단한 예'),
 7 : 	h1('간단한 예'),
 8 : 	start_form,
 9 : 	"이름이 뭐니? ",textfield('name'),p,
10 : 	"원하는 것은 뭐니?", p,
11 : 	checkbox_group(-name=>'words',
12 : 		-values=>['여자','아내','여동생','여자애'],
13 : 		-defaults=>['여자','아내']), p,
14 : 	"좋아하는 색은? ",
15 : 	popup_menu(-name=>'color',
16 : 		-values=>['빨간색','녹색','파란색','꼭지색']),p,
17 : 	submit('보내기'),
18 : 	end_form,
19 : 	hr;
20 : 
21 : if (param()) {
22 : 	print "니 이름: ",em(param('name')),p,
23 : 	"필요한 것: ",em(join(", ",param('words'))),p,
24 : 	"좋아하는 색: ",em(param('color')),
25 : 	hr;
26 : }
실행결과

example1.cgi 프라그마

함수의 집합외에서 가져올 수 있는 많은 수의 프라그마가 존재한다. 항상 대쉬(-)로 시작하는 프라그마는 CGI.pm의 동작 방법을 변경한다. 프라그마, 함수집합과 개개의 함수는 동일한

use()
행을 통해 가져올 수 있다. 예를들어 다음에 사용한 문장은 함수의 standart집합을 디버깅 모드를 끈 상태(프라그마 -no_debug)에서 가져오게 된다.

use CGI qw/:standard -no_debug/;

프라그마의 현재 목록은 다음과 같다.

-any
CGI -any를 사용하면 질의 개체가 인식하지 못하는 임의의 메소드는 새로운 HTML 태그로 해석된다. 이 것으로 넷스케잎이나 Money$oft의 특별한 HTML 확장을 지원할 수있다.

use CGI qw(-any);
$q=new CGI;
print $q->gradient({speed=>'fast',start=>'red',end=>'blue'});

any을 사용하는 경우 함수의 이름을 잘못입력하면 HTML 태그로 해석되므로 이 것은 가급적 사용하지 않는 것이 좋다.

-compile
이 것은 지시된 자동 적재 매소드가 먼저 컴파일되게 만든다. 이 것은 FastCGI나 mod_perl하에서 확장된 시간주기에대해 실행되는 스크립트에대해 유용하다. 사용하려는 메소드나 메소드 군에대해 이 것을 사용하기 바란다.

use CGI qw(-compile :standard :html3);

또는

use CGI qw(-compile :all);

주의: 이 방법으로 -compile 프라그마는 항상 컴파일된 함수를 현재의 이름공간으로 가져오는 효과를 갖는다. 가져오지 않고 컴파일하려면 대신에

compile()
를 사용한다.

-nph
CGI.pm이 NPH(Non-Parsed Header) 스트립트에대해 적당한 헤더를 생성하도록 만든다. 스크립트가 NPH라는 것을 서버에 통지하는 것외에 다른 것도 할 필요가 있다. NPH 스크립트에대한 논의는 NPH 스크립트 사용하기서버 밀기(몰밀지)를 보기 바란다.

-autoload
이 것은 인식하지 못하는 임의의 함수는 CGI.pm에서 가능한 평가되도록 자동 로더를 중첩시킨다. 이 것으로 사용자는 힘수를 심볼 테이블에 추가하지 않고 모든 CGI.pm의 기능을 사용할 수 있다. 이 것은 메모리 소모를 걱정해야 하는 mod_perl 사용자에게는 관심있는 일일 것이다.

경고: -autoload를 사용하는 경우 함수에는 반드시 괄호를 사용해야 한다. 즉, hr보다는 hr()를 사용하거나 스크립트의 시작부분에 use subs qw/hr p header/와 같은 것을 추가해야 한다.

-no_debug
이 것은 명령행 처리 특징을 사용하지 않게 만든다. 동적으로 생성된 HTML을 만들기위해 CGI.pm 스크립트를 명령행에서 기동하면서 표준입력이나 명령행으로부터 CGI 매개변수를 입력하고 싶지 않다면 이 프라그마를 사용한다.

use CGI qw(-no_debug :standard);

표준입력이 아니라 명령행에서만 매개변수를 처리하길 원한다면 다음과 같이 할 수 있다.

use CGI qw(-no_debug :standard);
restore_parameters(join('&',@ARGV));

보다 자세한 것은 디버깅에관한 절을 보기 바란다.

-private_tempfiles
CGI.pm은 업로드된 파일을 처리할 수 있다. 보통 이 것은 업로드된 파일을 임시 폴더에 저장하고 파일 업로드가 종료됐을 때 파일을 삭제한다. 그러나 이 것은 파일 업로드 절에서 설명하는 것처럼 위험부담이 있다. CGI 스크립트의 저자는 이 데이타가 극비의 정보라고 할 지라도 업로드 하는 동안 이 데이타를 훔처볼 수 있다. Unix 시스템에서 -private_tempfiles 프라그마는 이러한 위험성을 제거하기 위해 임시 파일을 열고, 심지어 임의의 데이타가 임시 파일에 쓰여지기 전에 바로 삭제되도록 만든다.


다음글: 제 3강 - 동적문서 생성하기 (7141)1996-07-03
이전글: 제 1강 - CGI.pm: 간단한 설명 (8409)1996-07-01

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.