当前位置: 代码迷 >> CGI >> 一个cgi程序(只是连接数据库)直接运行可以,被apache当cgi调用却老报500异常
  详细解决方案

一个cgi程序(只是连接数据库)直接运行可以,被apache当cgi调用却老报500异常

热度:601   发布时间:2013-09-11 17:59:56.0
一个cgi程序(只是连接数据库)直接运行可以,被apache当cgi调用却老报500错误
一个cgi程序(只是连接数据库)直接运行可以,被apache当cgi调用却老报500错误

代码如下:
C/C++ code

EXEC SQL BEGIN DECLARE SECTION;
    char    d_acDBNAME[ 64 + 1] = "calvin@127.0.0.1:5432" ;
    char    d_acDBUSER[ 64 + 1 ] = "calvin" ;
    char    d_acDBPASS[ 64 + 1 ] = "calvin" ;
EXEC SQL END DECLARE SECTION;

#define SQLCODE        sqlca.sqlcode
#define SQLSTATE    sqlca.sqlstate

int main()
{
    EXEC SQL
        CONNECT TO        :d_acDBNAME
        USER            :d_acDBUSER
        IDENTIFIED BY    :d_acDBPASS ;
    
    if( SQLCODE )
    {
        printf("Content-type: text/html\r\n\r\n");
        printf( "连接失败\r\n\r\n" );
    }
    else
    {
        printf("Content-type: text/html\r\n\r\n");
        printf( "连接成功\r\n\r\n" );
    }
    
    return 0;
}



makefile里这样写:
%.o : $(SQCPATH_SQC)\%.SQC
$(CC) -E -I$(CPATH_h) $(CFLAGS) -x c $(SQCPATH_SQC)\$*.SQC > $*.sqec
$(SQCP) $*.sqec
$(CC) -c -I$(CPATH_h) $(CFLAGS) $*.c -o $*.o

testdb.cgi : testdb.o
$(CC) -o $@ testdb.o -LD:/Work/PostgreSQL8.3/lib -lecpg

直接运行显示:
D:\Work\home\calvin\www\query_account\cgi-bin>testdb.cgi
Content-type: text/html

连接成功


在ie里被apache当cgi调用却返回500错误:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@netitanium.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

apache日志error.log有:
[Mon Jun 16 23:04:19 2008] [error] [client 127.0.0.1] Premature end of script headers: testdb.cgi

高手帮忙解决,先谢谢啦


------解决方案--------------------
你生成的header不正确么
------解决方案--------------------
建议LZ把打印Http文件Header消息的那句话拿到最前面去。
EXEC SQL BEGIN DECLARE SECTION;
char d_acDBNAME[ 64 + 1] = "calvin@127.0.0.1:5432" ;
char d_acDBUSER[ 64 + 1 ] = "calvin" ;
char d_acDBPASS[ 64 + 1 ] = "calvin" ;
EXEC SQL END DECLARE SECTION;

#define SQLCODE sqlca.sqlcode
#define SQLSTATE sqlca.sqlstate

int main()
{
printf("Content-type: text/html\r\n\r\n");
EXEC SQL
CONNECT TO :d_acDBNAME
USER :d_acDBUSER
IDENTIFIED BY :d_acDBPASS ;

if( SQLCODE )
{

printf( "连接失败\r\n\r\n" );
}
else
{
printf( "连接成功\r\n\r\n" );
}

return 0;
}

我的异常网推荐解决方案:The server encountered an internal error () that prevented it from fulfilling this request.,http://www.myexception.cn/java-web/317.html
  相关解决方案