>> Delete Reply from No. 18965 article
No. RE: c 로 만든 cgi 에러
...제발..환장합니다..소스올립니다

등록 2001-01-28 16:19:00 By localhost     조회 2
이름 aurora    

		소스는 자세히는 안봤습니다만
대충 무엇이 문제인지 감은 잡힙니다
우선
gcc -Wall 옵션을 붙여 컴파일 해보신후
코딩이 정확한지 체크하신후
그래도 안되신다면  httpd.conf 설정 파일중
[↙Directory ↙]
   Option ExecCGI
 .....
(적수보드에서 특수 문자를 필터링해서 위와같이 표현)
이부분에 ExecCGI 를 추가해보시고 (보안상 문제는 있지만)
그래도 안된다면 파일 권한을 확인해보세요
 일반적으로 디렉토리에 파일을 쓰지 못하는경우
문제가 발생합니다.
웹서버가 nobody로 돌아가고 있다면
 chown nobody.nobody gbook.html
 이런식으로 gbook.html 파일을 소유권을 바꿔보시길 바랍니다.
  : 일반 사용자 계정에서 cgi 실행이 가능하도록 세팅은 되어있는 상태입니다
: 물론 다른 cgi 파일은 잘 실행됩니다...
: 단지 이 프로그램 만이 Internal Server Error 가 나는데요
: 환장하겠습니다
: 제 생각에는 아파치 설정보다는 프로그램 상의 오류가 있는거 같은데
: 잘 모르겠네요...
: 그리고 에러 로그를 보면 다음과 같은 에러가 납니다
:
: Premature end of script headers: /export/home/kkk/public_html/cgi-bin/guestbook.cgi
:
: 소스는 다음과 같습니다...
:
: 
: #include <stdio.h>
: #include <stdlib.h>
: #include <string.h>
: #include <time.h>
: #include "cgiutil.h"
:
: #define TRUE        1
: #define FALSE       0
: #define BUFSIZE     1024
: #define MAX_ENTRIES 10000
:
: int embedSSI(char *str);
: typedef struct {
:     char *name;
:     char *value;
: } ENTRY;
:
:
: /* 문자열 str안에 SSI 구문이 포함돼 있는지 체크 */
:
: int embedSSI(char *str)
: {
:     if(strstr(str, "<!--#"))
:         return(TRUE);
:     else
:         return(FALSE);
: }
:
:
: /* SSI가 문자열 안에 포함돼 있을 경우 출력해주는 에러 메시지 */
:
: void ssiErrMsg()
: {
:     printf("<CENTER>");
:     printf("<H1>SSI 문장이 포함돼 있습니다.</H1><BR><HR>");
:     printf("<H3><BLINK>등록을 취소합니다.</BLINK><BR><BR>");
:     back();
: }
:
:
:
: int main()
: {
:     int i;
:     int cl;
:     char buf[BUFSIZ];
:     time_t Ourtime;
:   
:     FILE *fp;
:     ENTRY entVal[MAX_ENTRIES];
:
:
:     if((fp = fopen("../gbook.html", "a")) != NULL) {
:         printf("Content-type: text/html");
:         if(!strcmp(getenv("CONTENT_TYPE"), "application/x-www-form-urlencoded")) {
:             cl = atoi(getenv("CONTENT_LENGTH"));
:             for(i = 0; cl && (!feof(stdin)); i++) {
:                 entVal[i].value = fmakeword(stdin, '&', &cl);
:                 plustospace(entVal[i].value);
:                 unescape_url(entVal[i].value);
:                 entVal[i].name = makeword(entVal[i].value, '=');
:                 if(embedSSI(entVal[i].value)) {
:                     ssiErrMsg();
:                     exit(-1);
:                 }
:             }
:
:             Ourtime = time(NULL);
:             /* 이름과 E-Mail 주소 입력 */
:             sprintf(buf,    "<A     HREF="mailto:%s">%s</A>",    entVal[1].value, entVal[0].value);
:             fputs(buf, fp);
:
:             /* 전화번호 */
:             sprintf(buf, "&nbsp;&nbsp;(%s)<BR><BR>", entVal[2].value);
:             fputs(buf, fp);
:             sprintf(buf, "%s<BR><HR>", entVal[3].value);
:             fputs(buf, fp);
:             fclose(fp);
:
:             printf("<H1  ALIGN=center><BLINK>방명록을   작성해 주셔서   감사드립니다. </H1></
BLINK><BR>"); :             printf("<CENTER>");
:             printf("<FONT SIZE=+1><A HREF="//">홈페이지</A></FONT>&nbsp;&nbsp;");
:             printf("<FONT SIZE=+1><A HREF="gbook.html/">방명록보기</A></FONT>");
:             printf("<BR><HR>");
:
:             /* 자바스크립트로 만든 Back */
:             back();
:             printf("</CENTER>");
:         }
:     }
:   
:     return 0;
: }
 --
-?
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved