|
藍森林 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 & 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 = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )10;
sqlstm.offset = (unsigned int )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&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, &sqlctx, &sqlstm, &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 = &sqladt;
sqlstm.sqltdsp = &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 *)&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, &sqlctx, &sqlstm, &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 = &sqladt;
sqlstm.sqltdsp = &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 *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&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, &sqlctx, &sqlstm, &sqlfpn);
}
if ( sqlca.sqlcode < 0 )
reconnect_db();
}
/* EXEC SQL COMMIT; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )74;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &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&phone=fda&passwd1=123&passwd2=123&sex=e&age=fd&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,....我也遇到用樣問題,求指點,在哪裡設置環境變量 |
| |