perl 질문입니다.

lovethecorners의 이미지

예전에 먼저 일하는던 사람들이 만들어논 settings.pm 이라는 파일이있습니다. 그파일중에 다음과같은 sub 가있습니다.

sub parsequery {
   my ($buffer,@pairs,$name,$value,%fields);
   if(!($buffer = $ENV{'QUERY_STRING'})) { 
	if(!defined $ENV{'CONTENT_LENGTH'}) { $ENV{'CONTENT_LENGTH'} = 0; }
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 
   }
   @pairs = split(/&/, $buffer);
   foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $value =~ s/<([^>]|\n)*>//g;
      $value =~ s/<//g;
      $value =~ s/>//g;
      $fields{$name} = $value;
   }
   return %fields;
}

사용되어지는 perl 스크립트에서는 아래와 같이 불러사용합니다.

.
.
use settings;
my %fields = settings::parsequery;
.
.

지금 file uploadd 를 이용해서 만들고있는게있는데 뭔가 이상합니다.

form tag 를 다음과 같이 사용하면 필요한 data 조차 DB 에 전달이 안되네요...

<form method="post" action="dis-addadmins.pl" name="formaddrecord" enctype="multipart/form-data">

여기서 enctype 부분을 빼면 data 는 DB 에 입력이됩니다. 다시 enctype 을 넣으면 안되구요...그래서 제 생각에는 위의 sub 에서 뭔가하는것 같은데...잘 모르겠습니다. 혹시 아시는분 계신가 하고 이곳에 질문합니다. 아무래도 질문전달이 잘 안될거 같은 생각이 듭니다.. :cry:

lifthrasiir의 이미지

DBbuster wrote:
예전에 먼저 일하는던 사람들이 만들어논 settings.pm 이라는 파일이있습니다. 그파일중에 다음과같은 sub 가있습니다.

sub parsequery {
   my ($buffer,@pairs,$name,$value,%fields);
   if(!($buffer = $ENV{'QUERY_STRING'})) { 
	if(!defined $ENV{'CONTENT_LENGTH'}) { $ENV{'CONTENT_LENGTH'} = 0; }
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 
   }
   @pairs = split(/&/, $buffer);
   foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $value =~ s/<([^>]|\n)*>//g;
      $value =~ s/<//g;
      $value =~ s/>//g;
      $fields{$name} = $value;
   }
   return %fields;
}

사용되어지는 perl 스크립트에서는 아래와 같이 불러사용합니다.

.
.
use settings;
my %fields = settings::parsequery;
.
.

지금 file uploadd 를 이용해서 만들고있는게있는데 뭔가 이상합니다.

form tag 를 다음과 같이 사용하면 필요한 data 조차 DB 에 전달이 안되네요...

<form method="post" action="dis-addadmins.pl" name="formaddrecord" enctype="multipart/form-data">

여기서 enctype 부분을 빼면 data 는 DB 에 입력이됩니다. 다시 enctype 을 넣으면 안되구요...그래서 제 생각에는 위의 sub 에서 뭔가하는것 같은데...잘 모르겠습니다. 혹시 아시는분 계신가 하고 이곳에 질문합니다. 아무래도 질문전달이 잘 안될거 같은 생각이 듭니다.. :cry:

parsequery 함수는 cgi를 사용할 때 stdin으로 들어 오는 폼 입력을 처리해 주는 역할을 합니다. 하지만 코드를 봤을 때, 이 코드는 multipart를 제대로 처리하지 못 합니다. (multipart로 들어 오는 request는 일반적인 POST 입력과 상당히 다릅니다) 따라서 코드를 새로 작성하거나 그러한 입력을 제대로 처리하는 함수를 찾아 보셔야 할 겁니다.

제가 펄을 그리 잘 아는 편은 아니지만, CPAN에 PCGI라는 모듈이 있군요. multipart도 제대로 지원하는 것 같습니다.

- 토끼군

lovethecorners의 이미지

tokigun wrote:
DBbuster wrote:
예전에 먼저 일하는던 사람들이 만들어논 settings.pm 이라는 파일이있습니다. 그파일중에 다음과같은 sub 가있습니다.

sub parsequery {
   my ($buffer,@pairs,$name,$value,%fields);
   if(!($buffer = $ENV{'QUERY_STRING'})) { 
	if(!defined $ENV{'CONTENT_LENGTH'}) { $ENV{'CONTENT_LENGTH'} = 0; }
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 
   }
   @pairs = split(/&/, $buffer);
   foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $value =~ s/<([^>]|\n)*>//g;
      $value =~ s/<//g;
      $value =~ s/>//g;
      $fields{$name} = $value;
   }
   return %fields;
}

사용되어지는 perl 스크립트에서는 아래와 같이 불러사용합니다.

.
.
use settings;
my %fields = settings::parsequery;
.
.

지금 file uploadd 를 이용해서 만들고있는게있는데 뭔가 이상합니다.

form tag 를 다음과 같이 사용하면 필요한 data 조차 DB 에 전달이 안되네요...

<form method="post" action="dis-addadmins.pl" name="formaddrecord" enctype="multipart/form-data">

여기서 enctype 부분을 빼면 data 는 DB 에 입력이됩니다. 다시 enctype 을 넣으면 안되구요...그래서 제 생각에는 위의 sub 에서 뭔가하는것 같은데...잘 모르겠습니다. 혹시 아시는분 계신가 하고 이곳에 질문합니다. 아무래도 질문전달이 잘 안될거 같은 생각이 듭니다.. :cry:

parsequery 함수는 cgi를 사용할 때 stdin으로 들어 오는 폼 입력을 처리해 주는 역할을 합니다. 하지만 코드를 봤을 때, 이 코드는 multipart를 제대로 처리하지 못 합니다. (multipart로 들어 오는 request는 일반적인 POST 입력과 상당히 다릅니다) 따라서 코드를 새로 작성하거나 그러한 입력을 제대로 처리하는 함수를 찾아 보셔야 할 겁니다.

제가 펄을 그리 잘 아는 편은 아니지만, CPAN에 PCGI라는 모듈이 있군요. multipart도 제대로 지원하는 것 같습니다.

- 토끼군

아 그렇군요 감사합니다. 저도 perl 잘모릅니다...이제 한달되었네요..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.