藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


關於proc寫cgi

請問用proc能寫cgi程序嗎?如果可以,為什麼我用c寫成cgi的程序能運行,而proc寫的相同功能的程序卻運行不了呢?嗚。。。。。。。是不是用proc寫要修改(添加)什麼特定的東西呀?謝謝大家了!!!!

關於proc寫cgi

你用什麼語言寫的
C還是SQL

關於proc寫cgi

第一次用純粹c語言寫的,可以運行;第二次用的是c和sql寫的,處理的是相同的功能,編譯通過了,但是運行不了。不知道為什麼,麻煩你了,謝謝!

關於proc寫cgi

以下分別為bar.pc和編譯成c語言後的文件bar.c
該bar.c能編譯成可執行文件。

bar.pc

#include "common.h"

/***** global variable area *****/
char dbname[20];
char dbpasswd[20];
char logfile[128];
struct defaultNum{
char serial[8];
int seq;
};
struct defaultNum defaultNum[15];
int DefaultNum = 0;
/********************************/

/**********function*************/
int initParameter();
void reconnect_db();
/******************************/

int main(void)
{
  char logstring[128],num[6];
  int i;
  char date[20];

   bzero(dbname,sizeof(dbname));

  bzero(dbpasswd,sizeof(dbpasswd));

  bzero(date,sizeof(date));

  if(initParameter()) exit(0);

    EXEC SQL CONNECT :dbname IDENTIFIED BY :dbpasswd;

    if(sqlca.sqlcode<0)

    goto connect_error;

    else

   EXEC SQL SELECT to_char(count(*)) INTO :num from tab_chat_reg where flag="1";
   
    while (1){
                getDate(date);
                sprintf(logfile,"%s%s%s.log",DIR,"/hasense/log/chatGame/",date);
                EXEC SQL SELECT sqrt(25) INTO :i FROM dual;
                if ( sqlca.sqlcode < 0 )
                        reconnect_db();
            }
      EXEC SQL COMMIT;

  printf("Content-Type:text/vnd.wap.wml\n\n");
  printf("<?xml version=\"1.0\" encoding=\"gb2312\"?>;\n");
  printf("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"\n");
  printf(" \"http://www.wapforum.org/DTD/wml_1.1.xml\">;\n");
  printf("<wml>;");
  printf("<head>;");
  printf("<meta http-equiv=\"Cache-Control\" content=\"max-age=0\"/>;");
  printf("</head>;");
  printf("<card id=\"bar\" title=\"HEJ.COM.CN\">;\n");
  printf("<p align=\"left\">;\n");
  printf("原始部落酒吧");
  printf("今夜人數:\n");
  printf(num);
  printf("人\n");
  printf("<br/>;\n");
  printf("<a href=\"../htdocs/wml/search.wml\">;找人</a>;");
  printf("<br/>;\n");
  printf("<a href=\"../htdocs/wml/near.wml\">;");
  printf("近期活動\n");
  printf("</a>;<br/>;\n");
  printf("</p>;\n");
  printf("<do type=\"prev\" label=\"\267\265\273\330\">;\n");
  printf("<prev/>;\n");
  printf("</do>;");
  printf("</card>;\n");
  printf("</wml>;\n");
  fflush(stdout);
  return 0;
  exit(0);

connect_error:
   sprintf(logstring,"connect oracle error and sqlcode=[%d]",sqlca.sqlcode);
   sprintf(logstring,"connect oracle error and sqlcode=[%d]",sqlca.sqlcode);
   writeLog(logfile,logstring);
   exit(-1);
}


bar.c


/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned long magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn;
  unsigned short tvnvsnl;
  unsigned char *tvnnm;
  unsigned short tvnnml;
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn;
  unsigned short adtmode;
  unsigned short adtnum;  
  sqltvn adttvn[1];      
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn;
  unsigned short tdsnum;
  unsigned char *tdsval[1];
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name &amp; Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[7];
};
static struct sqlcxp sqlfpn =
{
    6,
    "bar.pc"
};


static unsigned long sqlctx = 4219;


static struct sqlexd {
   unsigned int   sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
            short *cud;
   unsigned char  *sqlest;
            char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
            void  **sqphsv;
   unsigned int   *sqphsl;
            int   *sqphss;
            void  **sqpind;
            int   *sqpins;
   unsigned int   *sqparm;
   unsigned int   **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
            void  *sqhstv[4];
   unsigned int   sqhstl[4];
            int   sqhsts[4];
            void  *sqindv[4];
            int   sqinds[4];
   unsigned int   sqharm[4];
   unsigned int   *sqharc[4];
   unsigned short  sqadto[4];
   unsigned short  sqtdso[4];
} sqlstm = {10,4};

/* SQLLIB Prototypes */
extern sqlcxt (/*_ void **, unsigned long *,
                   struct sqlexd *, struct sqlcxp * _*/);
extern sqlcx2t(/*_ void **, unsigned long *,
                   struct sqlexd *, struct sqlcxp * _*/);
extern sqlbuft(/*_ void **, char * _*/);
extern sqlgs2t(/*_ void **, char * _*/);
extern sqlorat(/*_ void **, unsigned long *, void * _*/);

/* Forms Interface */
static int IAPSUCC = 0;
static int IAPFAIL = 1403;
static int IAPFTL  = 535;
extern void sqliem(/*_ char *, int * _*/);

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* CUD (Compilation Unit Data) Array */
static short sqlcud0[] =
{10,4130,1,0,0,
5,0,0,1,0,0,27,41,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,
36,0,0,2,68,0,4,49,0,0,1,0,0,1,0,2,97,0,0,
55,0,0,3,36,0,4,54,0,0,1,0,0,1,0,2,3,0,0,
74,0,0,4,0,0,29,58,0,0,0,0,0,1,0,
89,0,0,5,0,0,32,180,0,0,0,0,0,1,0,
104,0,0,6,0,0,27,181,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,
135,0,0,7,27,0,4,182,0,0,0,0,0,1,0,
};




#include "common.h"

/***** global variable area *****/
char dbname[20];
char dbpasswd[20];
char logfile[128];
struct defaultNum{
char serial[8];
int seq;
};
struct defaultNum defaultNum[15];
int DefaultNum = 0;
/********************************/

/**********function*************/
int initParameter();
void reconnect_db();
/******************************/

int main(void)
{
  char logstring[128],num[6];
  int i;
  char date[20];

   bzero(dbname,sizeof(dbname));

  bzero(dbpasswd,sizeof(dbpasswd));

  bzero(date,sizeof(date));

  if(initParameter()) exit(0);

    /* EXEC SQL CONNECT :dbname IDENTIFIED BY :dbpasswd; */

{
    struct sqlexd sqlstm;
    sqlstm.sqlvsn = 10;
    sqlstm.arrsiz = 4;
    sqlstm.sqladtp = &amp;sqladt;
    sqlstm.sqltdsp = &amp;sqltds;
    sqlstm.iters = (unsigned int  )10;
    sqlstm.offset = (unsigned int  )5;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&amp;sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)dbname;
    sqlstm.sqhstl[0] = (unsigned int  )20;
    sqlstm.sqhsts[0] = (         int  )20;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)dbpasswd;
    sqlstm.sqhstl[1] = (unsigned int  )20;
    sqlstm.sqhsts[1] = (         int  )20;
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &amp;sqlctx, &amp;sqlstm, &amp;sqlfpn);
}



    if(sqlca.sqlcode<0)

    goto connect_error;

    else

   /* EXEC SQL SELECT to_char(count(*)) INTO :num from tab_chat_reg where flag="1"; */

{
   struct sqlexd sqlstm;
   sqlstm.sqlvsn = 10;
   sqlstm.arrsiz = 4;
   sqlstm.sqladtp = &amp;sqladt;
   sqlstm.sqltdsp = &amp;sqltds;
   sqlstm.stmt = "select to_char(count(*) ) into :b0  from tab_chat_reg wher\
e flag=\"1\"";
   sqlstm.iters = (unsigned int  )1;
   sqlstm.offset = (unsigned int  )36;
   sqlstm.selerr = (unsigned short)1;
   sqlstm.cud = sqlcud0;
   sqlstm.sqlest = (unsigned char  *)&amp;sqlca;
   sqlstm.sqlety = (unsigned short)256;
   sqlstm.occurs = (unsigned int  )0;
   sqlstm.sqhstv[0] = (         void  *)num;
   sqlstm.sqhstl[0] = (unsigned int  )6;
   sqlstm.sqhsts[0] = (         int  )0;
   sqlstm.sqindv[0] = (         void  *)0;
   sqlstm.sqinds[0] = (         int  )0;
   sqlstm.sqharm[0] = (unsigned int  )0;
   sqlstm.sqadto[0] = (unsigned short )0;
   sqlstm.sqtdso[0] = (unsigned short )0;
   sqlstm.sqphsv = sqlstm.sqhstv;
   sqlstm.sqphsl = sqlstm.sqhstl;
   sqlstm.sqphss = sqlstm.sqhsts;
   sqlstm.sqpind = sqlstm.sqindv;
   sqlstm.sqpins = sqlstm.sqinds;
   sqlstm.sqparm = sqlstm.sqharm;
   sqlstm.sqparc = sqlstm.sqharc;
   sqlstm.sqpadto = sqlstm.sqadto;
   sqlstm.sqptdso = sqlstm.sqtdso;
   sqlcxt((void **)0, &amp;sqlctx, &amp;sqlstm, &amp;sqlfpn);
}


   
    while (1){
                getDate(date);
                sprintf(logfile,"%s%s%s.log",DIR,"/hasense/log/chatGame/",date);
                /* EXEC SQL SELECT sqrt(25) INTO :i FROM dual; */

{
                struct sqlexd sqlstm;
                sqlstm.sqlvsn = 10;
                sqlstm.arrsiz = 4;
                sqlstm.sqladtp = &amp;sqladt;
                sqlstm.sqltdsp = &amp;sqltds;
                sqlstm.stmt = "select sqrt(25) into :b0  from dual ";
                sqlstm.iters = (unsigned int  )1;
                sqlstm.offset = (unsigned int  )55;
                sqlstm.selerr = (unsigned short)1;
                sqlstm.cud = sqlcud0;
                sqlstm.sqlest = (unsigned char  *)&amp;sqlca;
                sqlstm.sqlety = (unsigned short)256;
                sqlstm.occurs = (unsigned int  )0;
                sqlstm.sqhstv[0] = (         void  *)&amp;i;
                sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
                sqlstm.sqhsts[0] = (         int  )0;
                sqlstm.sqindv[0] = (         void  *)0;
                sqlstm.sqinds[0] = (         int  )0;
                sqlstm.sqharm[0] = (unsigned int  )0;
                sqlstm.sqadto[0] = (unsigned short )0;
                sqlstm.sqtdso[0] = (unsigned short )0;
                sqlstm.sqphsv = sqlstm.sqhstv;
                sqlstm.sqphsl = sqlstm.sqhstl;
                sqlstm.sqphss = sqlstm.sqhsts;
                sqlstm.sqpind = sqlstm.sqindv;
                sqlstm.sqpins = sqlstm.sqinds;
                sqlstm.sqparm = sqlstm.sqharm;
                sqlstm.sqparc = sqlstm.sqharc;
                sqlstm.sqpadto = sqlstm.sqadto;
                sqlstm.sqptdso = sqlstm.sqtdso;
                sqlcxt((void **)0, &amp;sqlctx, &amp;sqlstm, &amp;sqlfpn);
}


                if ( sqlca.sqlcode < 0 )
                        reconnect_db();
            }
      /* EXEC SQL COMMIT; */

{
      struct sqlexd sqlstm;
      sqlstm.sqlvsn = 10;
      sqlstm.arrsiz = 4;
      sqlstm.sqladtp = &amp;sqladt;
      sqlstm.sqltdsp = &amp;sqltds;
      sqlstm.iters = (unsigned int  )1;
      sqlstm.offset = (unsigned int  )74;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&amp;sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlcxt((void **)0, &amp;sqlctx, &amp;sqlstm, &amp;sqlfpn);
}



  printf("Content-Type:text/vnd.wap.wml\n\n");
  printf("<?xml version=\"1.0\" encoding=\"gb2312\"?>;\n");
  printf("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"\n");
  printf(" \"http://www.wapforum.org/DTD/wml_1.1.xml\">;\n");
  printf("<wml>;");
  printf("<head>;");
  printf("<meta http-equiv=\"Cache-Control\" content=\"max-age=0\"/>;");
  printf("</head>;");
  printf("<card id=\"bar\" title=\"HEJ.COM.CN\">;\n");
  printf("<p align=\"left\">;\n");
  printf("原始部落酒吧");
  printf("今夜人數:\n");
  printf(num);
  printf("人\n");
  printf("<br/>;\n");
  printf("<a href=\"../htdocs/wml/search.wml\">;找人</a>;");
  printf("<br/>;\n");
  printf("<a href=\"../htdocs/wml/near.wml\">;");
  printf("近期活動\n");
  printf("</a>;<br/>;\n");
  printf("</p>;\n");
  printf("<do type=\"prev\" label=\"\267\265\273\330\">;\n");
  printf("<prev/>;\n");
  printf("</do>;");
  printf("</card>;\n");
  printf("</wml>;\n");
  fflush(stdout);
  return 0;
  exit(0);

connect_error:
   sprintf(logstring,"connect oracle error and sqlcode=[%d]",sqlca.sqlcode);
   sprintf(logstring,"connect oracle error and sqlcode=[%d]",sqlca.sqlcode);
   writeLog(logfile,logstring);
   exit(-1);
}

關於proc寫cgi

是不可執行嗎

報什麼錯

會不會是運行時找不到需要的庫文件

關於proc寫cgi

報錯:
The requested action failed: 500 Internal Server Error

URL: http://192.9.200.123:8000/cgi-bin/reg.cgi?nickname=dfa&amp;phone=fda&amp;passwd1=123&amp;passwd2=123&amp;sex=e&amp;age=fd&amp;area=fda

應該是找不到文件的錯誤。但是我把其它的cgi文件放在該目錄下能找到。如果說找不到,應該是找不到oracle數據庫的函數,我用的是apache,需要在apache中設置數據庫的路徑嗎?如果需要,我該怎麼設置呢?謝謝!!!!

關於proc寫cgi

文件找到了,但是沒有正常執行。

看看httpd的error_log會有更詳細的錯誤信息的

關於proc寫cgi

如果報的錯誤是連接不上數據庫,那有可能是環境問題!

關於proc寫cgi

我是用apache發佈wap站點,請問當我用c寫cgi時調用數據庫(oracle9),需要在apache下對數據庫做哪些設置?謝謝了,很急。。。。。

關於proc寫cgi

ft,

你日誌看了麼?

關於proc寫cgi

以下是日誌:
[Tue Apr  1 10:29:50 2003] [error] [client 192.9.200.14] Premature end of script headers: /usr/local/apache/cgi-bin/bar.cgi
ld.so.1: bar.cgi: fatal: libclntsh.so.9.0: open failed: No such file or directory
好像是數據庫方面的問題,能否請問我該怎麼改正?

關於proc寫cgi

是環境變量!ORACL_HOME,LD_LIBRARY_PATH,....我也遇到用樣問題,求指點,在哪裡設置環境變量



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com