Не могу запустьть скрипт
От: samara  
Дата: 15.05.05 13:22
Оценка:
Скрипт компилируется без ошибок.
Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi
Хотя заголовок должен отдаваться.

Посоветуйте знающие люди.



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <stdarg.h>
#include <sys/types.h>
#include <time.h>
#include <fcntl.h>
#include <fstream.h>
#include <unistd.h>
#include <sys/stat.h>
#include <ctype.h>

#include "/usr/local/include/mysql/mysql.h"  // путь к mysql.h


char* mysqlhost = "localhost";     //Хост mysql БД
char* mysqluser = "user"; // Пользователь mysql БД
char* mysqlpassword = "password"; // Пароль mysql БД
char* mysqldatabase = "mybase"; // Имя базы mysql БД


MYSQL *mysql;
MYSQL_RES *res;

MYSQL_ROW row;

void exiterr(int errcode){

printf("Content-type: text/html\n\n");

switch(errcode)
{
case -3: printf("Unable to open file."); break;
case -1: printf("Invalid referer."); break;
case 5: printf("Account does not exist or suspended."); break;
default: printf("System error, code #%d.",errcode);
};

mysql_close(mysql);
exit(1);

};
............
.............
...........



16.05.05 15:52: Перенесено из 'C/C++'
Re: Не могу запустьть скрипт
От: raskin Россия  
Дата: 15.05.05 13:54
Оценка:
Здравствуйте, samara, Вы писали:

S>Скрипт компилируется без ошибок.

S>Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi
S>Хотя заголовок должен отдаваться.

S>Посоветуйте знающие люди.




S>
S> код
S>


А что выдаётся при запуске не как cgi (просто из консоли, с нужным окружением)?
Re[2]: Не могу запустьть скрипт
От: samara  
Дата: 15.05.05 15:01
Оценка:
Здравствуйте, raskin, Вы писали:

R>А что выдаётся при запуске не как cgi (просто из консоли, с нужным окружением)?


А черт его знает, я в с++ полный "0" и как запустить скрипт не как cgi с нужным окружением представляю слабо (мне нужно встроить чужой скрипт баннерной сети в сайт,).

Какие нужно выполнить действия, что бы локализовать ошибку?

Заранее спасибо.
Re[3]: Не могу запустьть скрипт
От: raskin Россия  
Дата: 15.05.05 15:13
Оценка:
Здравствуйте, samara, Вы писали:

S>Здравствуйте, raskin, Вы писали:


R>>А что выдаётся при запуске не как cgi (просто из консоли, с нужным окружением)?


S>А черт его знает, я в с++ полный "0" и как запустить скрипт не как cgi с нужным окружением представляю слабо.


S>Какие нужно выполнить действия, что бы локализовать ошибку?


S>Заранее спасибо.


Стоп. Это не про С++. Это про ОС. Сначала неплохо бы понять, что с заголовками.

У вас какой доступ на сервер?

Скомпилируйте у себя, запустите, покажите вывод программы.

Потом замените все

printf(...


на

fprintf(stderr,...


перекомпилируйте, положите на сервер, запустите и покажите, как поменяется error.log .
Re[4]: Не могу запустьть скрипт
От: Аноним  
Дата: 15.05.05 16:41
Оценка:
Здравствуйте, raskin, Вы писали:


R>Стоп. Это не про С++. Это про ОС. Сначала неплохо бы понять, что с заголовками.


R>У вас какой доступ на сервер?


SSH

R>Скомпилируйте у себя, запустите, покажите вывод программы.


R>Потом замените все


R>
R>printf(...
R>


R>на


R>
R>fprintf(stderr,...
R>


R>перекомпилируйте, положите на сервер, запустите и покажите, как поменяется error.log .


Заменил, скрипт перекомпилировался без ошибок, в логе снова ошибка: Premature end of script headers: /cgi-bin/engine.cgi
Re[5]: Не могу запустьть скрипт
От: raskin Россия  
Дата: 15.05.05 16:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>SSH

Шансы есть...

Зайдите в папку со скриптом из запустите его(исходный вариант) из SSH — консоли. Вывод скрипта скажет многое... Будете класть — не забудьте [codе][/code].
Re[6]: Не могу запустьть скрипт
От: samara  
Дата: 15.05.05 17:25
Оценка:
Здравствуйте, raskin, Вы писали:

R>Зайдите в папку со скриптом из запустите его(исходный вариант) из SSH — консоли. Вывод скрипта скажет многое...


Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron)
Re[7]: Не могу запустьть скрипт
От: raskin Россия  
Дата: 15.05.05 17:29
Оценка:
Здравствуйте, samara, Вы писали:

S>Здравствуйте, raskin, Вы писали:


R>>Зайдите в папку со скриптом из запустите его(исходный вариант) из SSH — консоли. Вывод скрипта скажет многое...


S>Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron)

скомпилировать... исходный вариант — который с printf, хотя это не важно. g++ там есть? Или кинуть скомпилироанный и там запустить просто командой
./engine.cgi
Re[8]: Не могу запустьть скрипт
От: samara  
Дата: 15.05.05 17:49
Оценка:
Здравствуйте, raskin, Вы писали:


S>>Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron)

R>скомпилировать... исходный вариант — который с printf, хотя это не важно. g++ там есть? Или кинуть скомпилироанный и там запустить просто командой
R>
R>./engine.cgi 
R>


Segmentation fault
Re[9]: Не могу запустьть скрипт
От: raskin Россия  
Дата: 15.05.05 17:57
Оценка:
Здравствуйте, samara, Вы писали:

S>Здравствуйте, raskin, Вы писали:



S>>>Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron)

R>>скомпилировать... исходный вариант — который с printf, хотя это не важно. g++ там есть? Или кинуть скомпилироанный и там запустить просто командой
R>>
R>>./engine.cgi 
R>>


S>Segmentation fault


Ёк. Объясняю: программа накрывается из-за ошибок (90%-с памятью), не вызывая до этого ни одной из функций, печатающих заголовок.
Совет:
g++ engine.cpp -o engine.cgi -g

— или как там Вы компилируете? make? наверное
make CXXFLAGS+=-g

потом

gdb engine.cgi
(gdb) run


И функцию с SegFault-ом в студию. И исходничек в студию... Если не один — все в студию...
Re[10]: Не могу запустьть скрипт
От: samara  
Дата: 15.05.05 18:18
Оценка:
Здравствуйте, raskin, Вы писали:




S>>Segmentation fault


R>Ёк. Объясняю: программа накрывается из-за ошибок (90%-с памятью), не вызывая до этого ни одной из функций, печатающих заголовок.


Раньше компилировал :

g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L/opt/lib/mysql



R>Совет:

R>g++ engine.cpp -o engine.cgi -g
дало следующий ответ

-bash-2.05b$ g++ engine.cpp -o engine.cgi -g
/tmp/ccP8CRmJ.o: In function `dynarray::Add(char *)':
/home/engine.cpp(.text+0xa4): undefined reference to `mysql_close'
/tmp/ccP8CRmJ.o: In function `timeOut(int)':
/home/engine.cpp:224: undefined reference to `mysql_close'
/tmp/ccP8CRmJ.o: In function `ShowBanner(char *, plc)':
/home/engine.cpp:392: undefined reference to `mysql_query'
/home/engine.cpp:419: undefined reference to `mysql_query'
/home/engine.cpp:425: undefined reference to `mysql_query'
/home/engine.cpp:441: undefined reference to `mysql_query'
/home/engine.cpp:446: undefined reference to `mysql_close'
/tmp/ccP8CRmJ.o: In function `main':
/home/engine.cpp:497: undefined reference to `mysql_init'
/home/engine.cpp:498: undefined reference to `mysql_real_connect'
/home/engine.cpp:500: undefined reference to `mysql_select_db'
/home/engine.cpp:513: undefined reference to `mysql_query'
/home/engine.cpp:514: undefined reference to `mysql_store_result'
/home/engine.cpp:515: undefined reference to `mysql_num_rows'
/home/engine.cpp:516: undefined reference to `mysql_fetch_row'
/home/engine.cpp:518: undefined reference to `mysql_free_result'
/home/engine.cpp:549: undefined reference to `mysql_query'
/home/engine.cpp:551: undefined reference to `mysql_store_result'
/home/engine.cpp:568: undefined reference to `mysql_num_rows'
/home/engine.cpp:571: undefined reference to `mysql_fetch_row'
/home/engine.cpp:629: undefined reference to `mysql_free_result'
-bash-2.05b$




R>(gdb) run
R>


Дало

(gdb) run
Starting program: /home/engine.cgi

Program received signal SIGSEGV, Segmentation fault.
0x3c0ffc79 in strlen () from /usr/lib/libc.so.4
(gdb) -bash-2.05b$



R>И функцию с SegFault-ом в студию. И исходничек в студию... Если не один — все в студию...


Исходник

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <stdarg.h>
#include <sys/types.h>
#include <time.h>
#include <fcntl.h>
#include <fstream.h>
#include <unistd.h>
#include <sys/stat.h>
#include <ctype.h>

#include "/usr/local/include/mysql/mysql.h"  // Замените данную строку на путь к mysql.h

//
// 
//
// .
// 
//
// 
// 
//
//  
//
//
// Отредактируйте следующие строки согласно
// настройкам Вашего сервера.
//

char* mysqlhost = "";     //Хост mysql БД
char* mysqluser = ""; // Пользователь mysql БД
char* mysqlpassword = ""; // Пароль mysql БД
char* mysqldatabase = ""; // Имя базы mysql БД
int timeoffset = 0; // Временное смещение в секундах относительно серверного времени
char* defaulti = ""; // Баннер по умолчанию
char* defaultu = ""; // Ссылка для баннера по умолчанию
char* sysname = ""; // Имя сети
float addition = 1; // Кол-во показов начисляемых при показе баннера пользователем.
int syswidth = 468; // Ширина баннера
int sysheight = 60; // Высота баннера
char* htmlreplace = "_URL_"; // Cтрока для замены на url ссылки в html баннерх
char* sysurl = ""; // Url системы (месторасположения скриптов php)

// 
// 

// 
// 


MYSQL *mysql;
MYSQL_RES *res;

MYSQL_ROW row;

void exiterr(int errcode){

printf("Content-type: text/html\n\n");

switch(errcode)
{
case -3: printf("TBE4: Unable to open HTML-banner file."); break;
case -1: printf("TBE4: Invalid referer."); break;
case 5: printf("TBE4: Account does not exist or suspended."); break;
default: printf("TBE4: System error, code #%d.",errcode);
};

mysql_close(mysql);
exit(1);

};


char *decode(char* string)
{

char* toformat;
toformat = (char*)malloc(sizeof(char)*5);
toformat[0] = '0';
toformat[1] = 'x';
toformat[4] = '\0';

char* outstring;
outstring = (char*)malloc(strlen(string)+1);
int incrm = 0;
int incrf = 0;

char *endptr;

while(string[incrf]!='\0')
    {
        if(string[incrf] == '%')
            {

            toformat[2] = string[incrf+1];
            toformat[3] = string[incrf+2];
            incrf += 2;

            char sym = (char)toascii(strtol(toformat,&endptr,0));
            outstring[incrm] = sym;

            } else { outstring[incrm] = string[incrf]; };

            incrm++;
            incrf++;

    };

outstring[incrm] = '\0';
return outstring;

};

int countSymbol(char* string, char symbol)
{
        int count = 0;
        while(*string)
        {
                if(*string++ == symbol) count++;
        };
        return count;
};

int findSymbol(char* string, char symbol, int start)
{
        int count = 0;
        int pos = 0;
        for(pos=start;pos<strlen(string);pos++)
        {
                if(string[pos] == symbol) return pos;
        };

    return pos;

};


void explode(char* out[],char* string, char separator)
{

int quantity = countSymbol(string,separator)+1;
char* output[quantity];

int pos = 0;
int seg = 0;
int count = 0;
int fr=0;

output[0] = (char*)malloc(sizeof(char*)*(strlen(string)+1));

while(1){

        if(string[pos]==separator || string[pos]=='\0')
        {
    *output[seg]='\0';
                output[seg]-=count;
                count=0;

        if(string[pos]=='\0') break;
        seg++;
        output[seg] = (char*)malloc(sizeof(char*)*(strlen(string)+1));

        } else {
                  count++;
            *output[seg]++ = string[pos];

        };

        pos++;

};

for(fr=0;fr<=seg;fr++){
out[fr]=output[fr];
};

};

char* replace(char* string, char* pattern, char* toreplace)
{

char* points;
char* output;
int count = 0, tocount = 0;
points = strstr(string,pattern);
if(points == NULL){ return string; };

output = (char*)malloc(strlen(string)-strlen(pattern));
while(string!=points)
{
        *output++ = *string++;
        count++;
};
while(*toreplace!='\0')
{
        *output++ = *toreplace++;
        count++;
        tocount++;
};

string+=(strlen(pattern));
while(*string!='\0')
{
        *output++ = *string++;
        count++;
};

*output = '\0';
output -= count;
toreplace -= tocount;

return replace(output, pattern, toreplace);

};

char *mSF(double rep)
{
char* temporary;
temporary = (char*)malloc(32);
sprintf(temporary,"%1.9f",rep);
return temporary;
};


char *itoa(long rep)
{
char* temporary;
temporary = (char*)malloc(32);
sprintf(temporary,"%d",rep);
return temporary;
};

void timeOut(int nsig)
{
mysql_close(mysql);

printf("Content-type: text/html\n\n");
printf("Too much load. Please try again later!");
exit(1);
};

char *myStrCat( int nl, ...)
{

va_list args;
va_start(args, nl );
char* output;

for(int i=0;i<nl;i++)
    {
        char* line = va_arg(args, char *);
        if(i==0)
            {
             output = (char*)malloc(sizeof(char)*(strlen(line)+2));
             *output = '\0';
            } else {
             output = (char*)realloc(output,sizeof(char)*(strlen(output)+strlen(line)+2));
            }
        output = strncat(output,line,strlen(line));
    }

va_end(args);

return output;

};


char* login;
char* page;
char* state;

void cgiInput(void){

                char *queryString;
                queryString = getenv("QUERY_STRING");
                if (strlen(queryString)<1) { queryString = "NoUser;0;0;"; };

                char *outs[3];
                explode(&(*outs),queryString,';');

                ::login = outs[0];
                ::page = outs[1];
                ::state = outs[2];

};

class plc
{
public:
    char* login;
    char* language;
    char* back_trg_cats;
    char* category;
    char* back_on;
    char* back_trg_clients;
    char* my_done_exps;
    char* my_done_u_exps;

    void setUp(char*& lo, char*& la, char*& ba, char*& ca, char*& be, char*& ce, char*& fg, char*& ty){
        login = strdup(lo);
        language = strdup(la);
        back_trg_cats = strdup(ba);
        category = strdup(ca);
        back_on = strdup(be);
        back_trg_clients = strdup(ce);
        my_done_exps = strdup(fg);
        my_done_u_exps = strdup(ty);
    };
};


plc place;

class dynarray
{

int countelems;
char** pointarray;

public:

    dynarray(void)
    {
        countelems = 0;
    };

void    Add(char* line)
    {
        countelems++;
        if(countelems==1){ pointarray = (char**)malloc(sizeof(char**)*countelems); } else {
        pointarray = (char**)realloc(pointarray, sizeof(char**)*countelems); };
        pointarray[countelems-1] = (char*)malloc(sizeof(char)*strlen(line));
        pointarray[countelems-1] = line;

    };

int     Count(void)
    {
        return countelems;
    };

char*    Get(int num)
    {
        if(num < Count()) return pointarray[num]; else return "";
    };

void     Explode(char* string, char separator)
    {

            int un = countSymbol(string,separator)+1;
            char *outs[un];
                    explode(&(*outs),string,separator);
            int i;
            pointarray = (char**)malloc(sizeof(char*)*(un+1));
            for(i=0;i<un;i++){

            pointarray[countelems] = (char*)malloc(sizeof(char)*strlen(outs[i]));
            pointarray[countelems] = outs[i];
            countelems++;

            };

    };

};


char* cookie;
dynarray allcookies;

void ShowBanner(char* complect, plc place)
{

    MYSQL_ROW result, banner;
    MYSQL_RES *pres;
    MYSQL_RES *res;

    dynarray insideData;
    if(complect == "default"){
        insideData.Add("default");
        insideData.Add("0");
        insideData.Add(defaulti);
        insideData.Add(defaultu);
        insideData.Add(sysname);
        insideData.Add("0");
        insideData.Add("0");
        insideData.Add("0");
        insideData.Add("0");
        } else {
            insideData.Explode(complect,'|');

            double acc = atof(insideData.Get(6));
            double bon = atof(insideData.Get(7));

            double acct = 0;
            double bonu = 0;

            if(acc>=1){ acct=1; } else { if(bon>=1){ bonu=1; }; };
            if(mysql_query(mysql,myStrCat(7,"UPDATE table_tbe3_clients SET account=account-'",mSF(acct),"', bonus=bonus-'",mSF(bonu),"' WHERE login='",insideData.Get(0),"'"))) exiterr(18);

            };


            int pl_addition = 1;
            int cl_addition = 1;

            int findex;
            for(findex=0;findex<allcookies.Count();findex++){
                dynarray incook;
                incook.Explode(allcookies.Get(findex),'=');
                    if(incook.Count()>1){
                        dynarray cooklog;
                        cooklog.Explode(incook.Get(0),'-');
                        if(cooklog.Count()>2){
                            char* fidju = cooklog.Get(0);
                            fidju++;
                            if(!strcmp(fidju,place.login))
                            {
                                pl_addition = 0;
                            };
                            if(!strcmp(cooklog.Get(1),insideData.Get(0)) && !strcmp(cooklog.Get(2),insideData.Get(1)))
                            {
                                cl_addition = 0;
                            };
                        };
                    };
            };


            if(mysql_query(mysql,myStrCat(7,"UPDATE table_tbe3_clients SET account=account+'",mSF(addition),"', my_done_exps=my_done_exps+1, my_done_u_exps=my_done_u_exps+'",mSF(pl_addition),"' WHERE login = '",place.login,"'"))) exiterr(24);
        if(complect != "default"){
            if(mysql_query(mysql,myStrCat(7,"UPDATE table_tbe3_clients_banners SET done_exps=done_exps+1, done_u_exps=done_u_exps+'",mSF(cl_addition),"'  WHERE client = '",insideData.Get(0),"' AND number='",insideData.Get(1),"'"))) exiterr(30);
        };


    char* refer;
    if(getenv("HTTP_REFERER")==NULL || atoi(state) == 0){
        refer = page;
        } else {
            char* inrefer;
            if(strstr(getenv("HTTP_REFERER"),"?")!=NULL)
                {
                inrefer = (char*)malloc(sizeof(char)*findSymbol(getenv("HTTP_REFERER"),'?',0));
                strxfrm(inrefer,getenv("HTTP_REFERER"),findSymbol(getenv("HTTP_REFERER"),'?',0)+1);
                } else { inrefer = getenv("HTTP_REFERER"); };
            refer = myStrCat(3,inrefer,"-",page);
            };

    refer = decode(refer);

    if(mysql_query(mysql,myStrCat(13,"INSERT INTO table_tbe3_system_traffic VALUES('",place.login,"','",insideData.Get(0),"','",insideData.Get(1),"','",mSF(time(NULL)+timeoffset),"','",refer,"','",getenv("REMOTE_ADDR"),"','0')"))) exiterr(31);

    char* urlout = myStrCat(6,sysurl,"go.php3","?id=",place.login,"&pg=",refer);
    int renseed = rand()%100;

    mysql_close(mysql);

    printf("Set-Cookie:%s-%s-%s=%d;\n",place.login,insideData.Get(0),insideData.Get(1),atoi(insideData.Get(8))+1);

    if(atoi(state)==1)
        {

            printf("Content-type: text/html\n\n");

            if(atoi(insideData.Get(5)))
            {
                struct stat *file_info = new struct stat;
                stat(insideData.Get(2),file_info);
                int mem_need = file_info->st_size;

                char* file_content = (char*)malloc(sizeof(char)*(mem_need+2));

                FILE* fp = fopen(insideData.Get(2),"rt");
                if(!fp) exiterr(-3);
                fread(file_content,mem_need,1,fp);
                file_content[mem_need] = 0;
                fclose(fp);

                printf("%s",replace(file_content,htmlreplace,urlout));

            } else {

            printf("\n<html>\n<a target=_blank href=\"%s\">\n<img border=0 src=\"%s?%d\" height=\"%d\" width=\"%d\" alt=\"%s\">\n</a>\n</html>",urlout,insideData.Get(2),renseed,sysheight,syswidth,insideData.Get(4));

            };

            exit(0);
        } else {


            printf("Location: %s?%d\n\n",insideData.Get(2),renseed);
            exit(0);
        };

};



MYSQL_RES *mres;
MYSQL_RES *pres;
MYSQL_ROW result;

int main(void)
{

mysql = mysql_init(NULL);

if (!(mysql_connect(mysql, mysqlhost , mysqluser , mysqlpassword ))) exiterr(1);
if (mysql_select_db(mysql, mysqldatabase )) exiterr(2);

time_t t = time(NULL)+timeoffset;

   alarm(5);
   signal(SIGALRM, timeOut);

cgiInput();

if(getenv("HTTP_REFERER")!=NULL){
    if(strstr(getenv("HTTP_REFERER"),"127.0.0")!=NULL) exiterr(-1);
    };

if (mysql_query(mysql,myStrCat(3,"SELECT * FROM table_tbe3_clients WHERE login='",login,"' AND status!='0'"))) exiterr(3);

if(!(res = mysql_store_result(mysql))) exiterr(4);
if(mysql_num_rows(res) == 0) exiterr(5);
if(!(row = mysql_fetch_row(res))) exiterr(6);
mysql_free_result(res);

place.setUp(row[0],row[8],row[15],row[9],row[14],row[16],row[17],row[19]);

if (mysql_query(mysql,myStrCat(5,"SELECT
table_tbe3_clients.login,
table_tbe3_clients.account,
table_tbe3_clients.bonus,
table_tbe3_clients.category,
table_tbe3_clients.class,
table_tbe3_clients_banners.number,
table_tbe3_clients_banners.profile,
table_tbe3_clients_banners.unique_exps,
table_tbe3_clients_banners.all_exps,
table_tbe3_clients_banners.is_html,
table_tbe3_clients_banners.banner_image_url,
table_tbe3_clients_banners.banner_url,
table_tbe3_clients_banners.alt_text,
table_tbe3_clients_banners_profiles.desctarget,
table_tbe3_clients_banners_profiles.time,
table_tbe3_clients_banners_profiles.day,
table_tbe3_clients_banners_profiles.desctarget_on_off,
table_tbe3_clients_banners_profiles.time_on_off,
table_tbe3_clients_banners_profiles.directtrg_on_off,
table_tbe3_clients_banners_profiles.day_on_off,
table_tbe3_clients_banners.done_exps,
table_tbe3_clients_banners_profiles.directtrg FROM table_tbe3_clients,table_tbe3_clients_banners,table_tbe3_clients_banners_profiles
WHERE table_tbe3_clients.login!='",place.login,"' AND table_tbe3_clients.language='",place.language,"' AND table_tbe3_clients.status = '1' AND ( table_tbe3_clients.account >= '1' OR table_tbe3_clients.bonus >= '1')
AND table_tbe3_clients.login = table_tbe3_clients_banners.client AND
table_tbe3_clients.login = table_tbe3_clients_banners_profiles.client AND
table_tbe3_clients_banners.profile = table_tbe3_clients_banners_profiles.name
AND table_tbe3_clients_banners.banner_image_url != '' AND table_tbe3_clients_banners.banner_url != '' AND table_tbe3_clients_banners.on_off='1' AND table_tbe3_clients_banners.status='1'"))) exiterr(7);

if(!(res = mysql_store_result(mysql))) exiterr(8);

dynarray commbanners, stdbanners;

MYSQL_ROW banner, misc;
int bindex;
dynarray sep_backtrg;
sep_backtrg.Explode(place.back_trg_cats,':');

if(getenv("HTTP_COOKIE")!=NULL){
        cookie = getenv("HTTP_COOKIE");
        allcookies.Explode(cookie,';');
        };

time_t tn = time(NULL)+timeoffset;
struct tm *tmn = localtime( &tn );

for(bindex=0;bindex<mysql_num_rows(res);bindex++){

    banner = mysql_fetch_row(res);


    int uniqueexps = 0;

            int findex;
            for(findex=0;findex<allcookies.Count();findex++){
                dynarray incook;
                incook.Explode(allcookies.Get(findex),'=');
                    if(incook.Count()>1){
                        dynarray cooklog;
                        cooklog.Explode(incook.Get(0),'-');
                        if(cooklog.Count()>2){

                            if(!strcmp(cooklog.Get(1),banner[0]) && !strcmp(cooklog.Get(2),banner[5]))
                            {
                                uniqueexps = atoi(incook.Get(1));
                            };
                        };
                    };
            };




    dynarray sep_descttrg, sep_timetrg, sep_daytrg;
    sep_descttrg.Explode(banner[13],':');
    sep_timetrg.Explode(banner[14],':');
    sep_daytrg.Explode(banner[15],':');

    int curcat = atoi(banner[3]);

            if( (atoi(sep_descttrg.Get(atoi(place.category))) == 1 || atoi(banner[16]) != 1) &&
                (atoi(sep_timetrg.Get(tmn->tm_hour)) == 1 || atoi(banner[17]) != 1) &&
                (atoi(sep_daytrg.Get(tmn->tm_wday)) == 1 || atoi(banner[19]) != 1) &&
                (strstr(myStrCat(2,banner[21]," "),myStrCat(2,place.login," ")) != NULL || atoi(banner[18]) != 1) &&
                (uniqueexps < atoi(banner[7]) || atoi(banner[7]) == 0) &&
                (atoi(banner[20]) < atoi(banner[8]) || atoi(banner[8]) == 0) &&
                (atoi(banner[9]) != 1 || atoi(state) == 1) &&
                (atoi(place.back_on) != 1 ||
                    ( strstr(myStrCat(2,place.back_trg_clients," "),myStrCat(2,banner[0]," ")) == NULL && atoi(sep_backtrg.Get(atoi(banner[3]))) != 1 ) ||
                        atoi(banner[4]) == 1)
                ){

                    if(atoi(banner[4]) == 1)
                    {
                        commbanners.Add(myStrCat(17,banner[0],"|",banner[5],"|",banner[10],"|",banner[11],"|",banner[12],"|",banner[9],"|",banner[1],"|",banner[2],"|",itoa(uniqueexps)));

                    } else {
                        stdbanners.Add(myStrCat(17,banner[0],"|",banner[5],"|",banner[10],"|",banner[11],"|",banner[12],"|",banner[9],"|",banner[1],"|",banner[2],"|",itoa(uniqueexps)));

                    };
                };


};

mysql_free_result(res);

int selected;

srand((unsigned)time(&t));

if(commbanners.Count()>0)
{
    selected = rand()%commbanners.Count();
    ShowBanner(commbanners.Get(selected),place);

} else     {
        if(stdbanners.Count()>0)
        {

        selected = rand()%stdbanners.Count();
        ShowBanner(stdbanners.Get(selected),place);

        } else {

        ShowBanner("default",place);

        };

    };

}




R>
R>gdb engine.cgi

Дало


-bash-2.05b$ gdb engine.cgi
GNU gdb 4.18 (FreeBSD)
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd"...Deprecated bfd_read called a
t /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c line 2
627 in elfstab_build_psymtabs
Deprecated bfd_read called at /usr/src/gnu/usr.bin/binutils/gdb/../../../../cont
rib/gdb/gdb/dbxread.c line 933 in fill_symbuf
Re[10]: Не могу запустьть скрипт
От: samara  
Дата: 15.05.05 18:21
Оценка:
Здравствуйте, raskin, Вы писали:

R>>>
R>>>./engine.cgi 
R>>>


так возвращает



-bash-2.05b$ ./engine.cgi
-bash: ./engine.cgi: No such file or directory
Re[11]: Не могу запустьть скрипт
От: raskin Россия  
Дата: 15.05.05 18:46
Оценка:
Здравствуйте, samara, Вы писали:

А как Вы перекомпилируете обычно программу? запускаете что? У меня скомпилировалось, но т.к. подключиться к SQL без пароля программа не смогла, а двух одинаковых баз не бывает, то она просто корректно вышла.
скажите

export CXXFLAGS=$CXXFLAGS -g;

, перекомпилируйте, скажите

gdb engine.cgi
(gdb) run
(gdb) bt


Или
g++ -g -o engine.cgi -lmysqlclient -L/usr/lib/mysql -L/usr/local/lib/mysql


и те же пассы.

ещё полезно сделать следующее: повесить с этим именем файлик типа такого:

#!/bin/sh
set | sed -e 's/^/export ' > setmyenv.sh


, запустить

sh setmyenv.sh

и повторить цикл пассов по отладке.
Похоже, выкладывать исходник было бессмысленно, т.к. без подсоединения к БД всё работает...
Re[12]: Не могу запустьть скрипт
От: samara  
Дата: 15.05.05 19:01
Оценка:
Здравствуйте, raskin, Вы писали:

R>Здравствуйте, samara, Вы писали:


R>А как Вы перекомпилируете обычно программу? запускаете что?


запускаю:
g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L/opt/lib/mysql




R>скажите


R>
R>export CXXFLAGS=$CXXFLAGS -g;
R>

Вернуло

-bash-2.05b$ -bash-2.05b$ export CXXFLAGS=$CXXFLAGS -g;
-bash: -bash-2.05b$: command not found
-bash-2.05b$ -bash: export: `-g': not a valid identifier





R>, перекомпилируйте, скажите


R>Или

R>
R>g++ -g -o engine.cgi -lmysqlclient -L/usr/lib/mysql -L/usr/local/lib/mysql
R>


Вернуло


-bash-2.05b$ g++ -g -o engine.cgi -lmysqlclient -L/usr/lib/mysql -L/usr/local/lib/mysql
/usr/lib/crt1.o: In function `_start':
/usr/lib/crt1.o(.text+0x82): undefined reference to `main'


Может дамп базы поможет



-- --------------------------------------------------------

-- 
-- Структура таблицы `table_tbe3_clients`
-- 

CREATE TABLE `table_tbe3_clients` (
  `login` varchar(255) NOT NULL default '',
  `password` text,
  `site_name` text,
  `site_url` text,
  `e_mail` text,
  `class` int(1) NOT NULL default '0',
  `registration_date` double default NULL,
  `status` int(1) NOT NULL default '0',
  `language` int(1) NOT NULL default '0',
  `category` int(1) NOT NULL default '0',
  `description` text,
  `keywords` text,
  `account` double default NULL,
  `bonus` double default NULL,
  `back_on` int(1) NOT NULL default '0',
  `back_trg_cats` text,
  `back_trg_clients` text,
  `my_done_exps` double default NULL,
  `my_done_clicks` double default NULL,
  `my_done_u_exps` double default NULL,
  `my_done_u_clicks` double default NULL,
  KEY `login_key` (`login`),
  KEY `status_key` (`status`),
  KEY `language_key` (`language`)
) TYPE=MyISAM;

-- --------------------------------------------------------

-- 
-- Структура таблицы `table_tbe3_clients_banners`
-- 

CREATE TABLE `table_tbe3_clients_banners` (
  `client` text,
  `number` text,
  `banner_image_url` text,
  `banner_url` text,
  `alt_text` text,
  `profile` int(11) default NULL,
  `on_off` int(11) default NULL,
  `status` int(11) default NULL,
  `unique_exps` double default NULL,
  `all_exps` double default NULL,
  `done_exps` double default NULL,
  `done_clicks` double default NULL,
  `done_u_exps` double default NULL,
  `done_u_clicks` double default NULL,
  `is_html` int(11) default NULL
) TYPE=MyISAM;

-- --------------------------------------------------------

-- 
-- Структура таблицы `table_tbe3_clients_banners_profiles`
-- 

CREATE TABLE `table_tbe3_clients_banners_profiles` (
  `client` text,
  `name` text,
  `desctarget_on_off` int(11) default NULL,
  `time_on_off` int(11) default NULL,
  `directtrg_on_off` int(11) default NULL,
  `day_on_off` int(11) default NULL,
  `desctarget` text,
  `time` text,
  `directtrg` text,
  `day` text
) TYPE=MyISAM;

-- --------------------------------------------------------

-- 
-- Структура таблицы `table_tbe3_system_misc`
-- 

CREATE TABLE `table_tbe3_system_misc` (
  `lastuser` int(11) default NULL,
  `lastflush` int(11) default NULL,
  `adminlogin` text,
  `adminpass` text,
  `molog` text,
  `mopass` text
) TYPE=MyISAM;

-- --------------------------------------------------------

-- 
-- Структура таблицы `table_tbe3_system_stats_overall`
-- 

CREATE TABLE `table_tbe3_system_stats_overall` (
  `done_exps` int(11) default NULL,
  `done_clicks` int(11) default NULL,
  `done_u_exps` int(11) default NULL,
  `done_u_clicks` int(11) default NULL,
  `date` int(11) default NULL
) TYPE=MyISAM;

-- --------------------------------------------------------

-- 
-- Структура таблицы `table_tbe3_system_traffic`
-- 

CREATE TABLE `table_tbe3_system_traffic` (
  `host_login` text,
  `advertiser_login` varchar(255) NOT NULL default '',
  `banner_number` varchar(255) NOT NULL default '',
  `time` int(11) default NULL,
  `referrer` text,
  `remote_ip` varchar(255) NOT NULL default '',
  `event` int(1) NOT NULL default '0',
  KEY `banner_number_key` (`banner_number`),
  KEY `remote_ip_key` (`remote_ip`),
  KEY `advertiser_login_key` (`advertiser_login`)
) TYPE=MyISAM;
Re[13]: Не могу запустьть скрипт
От: raskin Россия  
Дата: 15.05.05 19:27
Оценка:
Здравствуйте, samara, Вы писали:

S>Здравствуйте, raskin, Вы писали:


R>>Здравствуйте, samara, Вы писали:


R>>А как Вы перекомпилируете обычно программу? запускаете что?


S>запускаю:

S>
S>g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L/opt/lib/mysql
S>




R>>скажите


R>>
R>>export CXXFLAGS=$CXXFLAGS -g;
R>>

S>Вернуло

S>
S>-bash-2.05b$ -bash-2.05b$ export CXXFLAGS=$CXXFLAGS -g;
S>-bash: -bash-2.05b$: command not found
S>-bash-2.05b$ -bash: export: `-g': not a valid identifier

S>

а без лишнего?



R>>, перекомпилируйте, скажите


R>>Или

R>>
R>>g++ -g -o engine.cgi -lmysqlclient -L/usr/lib/mysql -L/usr/local/lib/mysql engine.cpp
R>>

Ну, забыл, можно такое и угадать...
S>Вернуло


S>
S>/usr/lib/crt1.o(.text+0x82): undefined reference to `main'
S>


Скажем, надо на самом деле
g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L/opt/lib/mysql


И все пассы по новой (c gdb)


S>Может дамп базы поможет


S>

ДАМП
        
S>


Заводить таблицу у себя — лень...
Re[14]: Не могу запустьть скрипт
От: samara  
Дата: 15.05.05 19:46
Оценка:
Здравствуйте, raskin, Вы писали:



R>а без лишнего?


-bash: export: `-g': not a valid identifier





R>Скажем, надо на самом деле

R>
R>g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L/opt/lib/mysql
R>


Все без ошибок


-bash-2.05b$ g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L/opt/lib/mysql
-bash-2.05b$



R>И все пассы по новой (c gdb)




-bash-2.05b$ gdb engine.cgi
GNU gdb 4.18 (FreeBSD)
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd"...
(no debugging symbols found)...




(gdb) run
Starting program: /home/engine.cgi
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...
Program received signal SIGSEGV, Segmentation fault.
0x3c0ffc79 in strlen () from /usr/lib/libc.so.4


Пожаловался в саппорт, вот ответ:

Segmentation fault свидетельствует о неудачной сборке файла, либо его компоновки. Также такая ошибка иногда появляется когда используется бинарный модуль, собранный на другой UNIX-подобной ОС.

Я попробовал собрать модуль самостоятельно:

bash-2.05b$ g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L
/opt/lib/mysql engine.cpp
/tmp/cc5tVLXF.o(.data+0x0): multiple definition of `mysqlhost'
/tmp/ccPII7uH.o(.data+0x0): first defined here
/tmp/cc5tVLXF.o(.data+0x4): multiple definition of `mysqluser'
/tmp/ccPII7uH.o(.data+0x4): first defined here
/tmp/cc5tVLXF.o(.data+0x8): multiple definition of `mysqlpassword'
/tmp/ccPII7uH.o(.data+0x8): first defined here
/tmp/cc5tVLXF.o(.data+0xc): multiple definition of `mysqldatabase'
/tmp/ccPII7uH.o(.data+0xc): first defined here
/tmp/cc5tVLXF.o(.data+0x10): multiple definition of `timeoffset'
/tmp/ccPII7uH.o(.data+0x10): first defined here
/tmp/cc5tVLXF.o(.data+0x14): multiple definition of `defaulti'
/tmp/ccPII7uH.o(.data+0x14): first defined here
/tmp/cc5tVLXF.o(.data+0x18): multiple definition of `defaultu'
/tmp/ccPII7uH.o(.data+0x18): first defined here
/tmp/cc5tVLXF.o(.data+0x1c): multiple definition of `sysname'
/tmp/ccPII7uH.o(.data+0x1c): first defined here
/tmp/cc5tVLXF.o(.data+0x20): multiple definition of `addition'
/tmp/ccPII7uH.o(.data+0x20): first defined here
/tmp/cc5tVLXF.o(.data+0x24): multiple definition of `syswidth'
/tmp/ccPII7uH.o(.data+0x24): first defined here
/tmp/cc5tVLXF.o(.data+0x28): multiple definition of `sysheight'
/tmp/ccPII7uH.o(.data+0x28): first defined here
/tmp/cc5tVLXF.o(.data+0x2c): multiple definition of `htmlreplace'
/tmp/ccPII7uH.o(.data+0x2c): first defined here
/tmp/cc5tVLXF.o(.data+0x30): multiple definition of `sysurl'
/tmp/ccPII7uH.o(.data+0x30): first defined here
/tmp/cc5tVLXF.o: In function `exiterr(int)':
/tmp/cc5tVLXF.o(.text+0x0): multiple definition of `exiterr(int)'
/tmp/ccPII7uH.o(.text+0x0): first defined here
/tmp/cc5tVLXF.o(.data+0x3c): multiple definition of `mysql'
/tmp/ccPII7uH.o(.data+0x3c): first defined here
/tmp/cc5tVLXF.o: In function `decode(char *)':
/tmp/cc5tVLXF.o(.text+0xc0): multiple definition of `decode(char *)'
/tmp/ccPII7uH.o(.text+0xc0): first defined here
/tmp/cc5tVLXF.o: In function `countSymbol(char *, char)':
/tmp/cc5tVLXF.o(.text+0x1dc): multiple definition of `countSymbol(char *, char)'
/tmp/ccPII7uH.o(.text+0x1dc): first defined here
/tmp/cc5tVLXF.o: In function `findSymbol(char *, char, int)':
/tmp/cc5tVLXF.o(.text+0x21c): multiple definition of `findSymbol(char *, char, i
nt)'
/tmp/ccPII7uH.o(.text+0x21c): first defined here
/tmp/cc5tVLXF.o: In function `explode(char **, char *, char)':
/tmp/cc5tVLXF.o(.text+0x280): multiple definition of `explode(char **, char *, c
har)'
/tmp/ccPII7uH.o(.text+0x280): first defined here
/tmp/cc5tVLXF.o: In function `replace(char *, char *, char *)':
/tmp/cc5tVLXF.o(.text+0x494): multiple definition of `replace(char *, char *, ch
ar *)'
/tmp/ccPII7uH.o(.text+0x494): first defined here
/tmp/cc5tVLXF.o: In function `mSF(double)':
/tmp/cc5tVLXF.o(.text+0x5e4): multiple definition of `mSF(double)'
/tmp/ccPII7uH.o(.text+0x5e4): first defined here
/tmp/cc5tVLXF.o: In function `itoa(long)':
/tmp/cc5tVLXF.o(.text+0x624): multiple definition of `itoa(long)'
/tmp/ccPII7uH.o(.text+0x624): first defined here
/tmp/cc5tVLXF.o: In function `timeOut(int)':
/tmp/cc5tVLXF.o(.text+0x660): multiple definition of `timeOut(int)'
/tmp/ccPII7uH.o(.text+0x660): first defined here
/tmp/cc5tVLXF.o: In function `myStrCat(int,...)':
/tmp/cc5tVLXF.o(.text+0x6b4): multiple definition of `myStrCat(int,...)'
/tmp/ccPII7uH.o(.text+0x6b4): first defined here
/tmp/cc5tVLXF.o: In function `cgiInput(void)':
/tmp/cc5tVLXF.o(.text+0x79c): multiple definition of `cgiInput(void)'
/tmp/ccPII7uH.o(.text+0x79c): first defined here
/tmp/cc5tVLXF.o(.data+0x48): multiple definition of `login'
/tmp/ccPII7uH.o(.data+0x48): first defined here
/tmp/cc5tVLXF.o(.data+0x4c): multiple definition of `page'
/tmp/ccPII7uH.o(.data+0x4c): first defined here
/tmp/cc5tVLXF.o(.data+0x50): multiple definition of `state'
/tmp/ccPII7uH.o(.data+0x50): first defined here
/tmp/cc5tVLXF.o(.data+0x34): multiple definition of `allcookies'
/tmp/ccPII7uH.o(.data+0x34): first defined here
/tmp/cc5tVLXF.o: In function `ShowBanner(char *, plc)':
/tmp/cc5tVLXF.o(.text+0x804): multiple definition of `ShowBanner(char *, plc)'
/tmp/ccPII7uH.o(.text+0x804): first defined here
/tmp/cc5tVLXF.o: In function `main':
/tmp/cc5tVLXF.o(.text+0x11b0): multiple definition of `main'
/tmp/ccPII7uH.o(.text+0x11b0): first defined here
/tmp/cc5tVLXF.o(.data+0x40): multiple definition of `res'
/tmp/ccPII7uH.o(.data+0x40): first defined here
/tmp/cc5tVLXF.o(.data+0x44): multiple definition of `row'
/tmp/ccPII7uH.o(.data+0x44): first defined here
/tmp/cc5tVLXF.o(.data+0x60): multiple definition of `place'
/tmp/ccPII7uH.o(.data+0x60): first defined here
/tmp/cc5tVLXF.o(.data+0x80): multiple definition of `cookie'
/tmp/ccPII7uH.o(.data+0x80): first defined here
/tmp/cc5tVLXF.o(.data+0x84): multiple definition of `mres'
/tmp/ccPII7uH.o(.data+0x84): first defined here
/tmp/cc5tVLXF.o(.data+0x88): multiple definition of `pres'
/tmp/ccPII7uH.o(.data+0x88): first defined here
/tmp/cc5tVLXF.o(.data+0x8c): multiple definition of `result'
/tmp/ccPII7uH.o(.data+0x8c): first defined here
Re: Не могу запустьть скрипт
От: Laurel  
Дата: 16.05.05 07:00
Оценка:
Здравствуйте, samara, Вы писали:

S>Скрипт компилируется без ошибок.

S>Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi
S>Хотя заголовок должен отдаваться.

S>
S>exit(1);
S>


Код возврата смущает... Попробуйте, все-таки exit(0).
Возможно, серверу не нравится, что скрипт пытается ошибку вернуть. Хотя ошибка странная.
Re: Не могу запустьть скрипт
От: Linuxoid  
Дата: 16.05.05 07:28
Оценка: +1
Здравствуйте, samara, Вы писали:

S>Скрипт компилируется без ошибок.

S>Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi
S>Хотя заголовок должен отдаваться.

S>Посоветуйте знающие люди.


А зачем тебе писать cgi-ку на С++ ? Пиши на перле или что ты там знаешь, это будет проще и быстрее.
Re[2]: Не могу запустьть скрипт
От: samara  
Дата: 17.05.05 05:36
Оценка:
Здравствуйте, Linuxoid, Вы писали:

L>А зачем тебе писать cgi-ку на С++ ? Пиши на перле или что ты там знаешь, это будет проще и быстрее.


Да не пишу я ее, нужно готовую вставить.
Я сам кроме php ничего не знаю.
Re[2]: Не могу запустьть скрипт
От: samara  
Дата: 17.05.05 05:41
Оценка:
Здравствуйте, Laurel, Вы писали:

S>>
S>>exit(1);
S>>


L>Код возврата смущает... Попробуйте, все-таки exit(0).

L>Возможно, серверу не нравится, что скрипт пытается ошибку вернуть. Хотя ошибка странная.

Попробовал без изменений.
Re: Не могу запустьть скрипт
От: whoarym  
Дата: 17.05.05 13:23
Оценка:
Здравствуйте, samara, Вы писали:

S>Скрипт компилируется без ошибок.

S>Но при вызове выдает ошибку: Premature end of script headers: /cgi-bin/engine.cgi
S>Хотя заголовок должен отдаваться.

S>Посоветуйте знающие люди.


вопрос: помечен ли файлик как исполняемый?
Re[2]: Не могу запустьть скрипт
От: samara  
Дата: 17.05.05 13:28
Оценка:
Здравствуйте, whoarym, Вы писали:

W>вопрос: помечен ли файлик как исполняемый?


Если это про CMOD, то ДА (777).

Если нет. то по подробнее...
Re[15]: Не могу запустьть скрипт
От: butcher Россия http://bu7cher.blogspot.com
Дата: 18.05.05 06:23
Оценка:
Здравствуйте, samara, Вы писали:

S>Я попробовал собрать модуль самостоятельно:


S>bash-2.05b$ g++ engine.cpp -o engine.cgi -lmysqlclient -L/usr/local/lib/mysql -L

S>/opt/lib/mysql engine.cpp

У вас где фактически находится libmysqlclient? Могу помочь собрать программу "на месте". Если интересно, пишите на мыло в профиле.

Нет ничего невозможного..
Re[9]: Не могу запустьть скрипт
От: Аноним  
Дата: 03.06.05 10:31
Оценка:
Здравствуйте, samara, Вы писали:

S>Здравствуйте, raskin, Вы писали:



S>>>Как запустить нескомпилированный скрипт из консоли? (Раньше SSH пользовался только для редактирования cron)

R>>скомпилировать... исходный вариант — который с printf, хотя это не важно. g++ там есть? Или кинуть скомпилироанный и там запустить просто командой
R>>
R>>./engine.cgi 
R>>


S>Segmentation fault


Только что с проблемой Segmentation Fault(далее SF) столкнулся.

Оказалось что SF выскакивает когда доступ пользователю запрещен.
Например пользователю @localhost доступ запрещен — ставишь в программе host= "127.0.0.1" и появляется SF
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.