Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > не могу разобраться как работать с C++ как CGI


Автор: WhiteSpirit 1.2.2006, 12:35
Откомпилировал следующий код:
в апаче на сервере провайдера задал .exe
Код

#include <stdio.h>
#include <conio.h>
void main()
{
        printf("Content-Type: text/html\n");
        printf("\n");
        printf("<html>");
        printf("<h1>Hello world</h1>");
        printf("</html>");
}


В итоге в лог ошибок выводится следующее:
Premature end of script headers: ...cgi/testcgi.exe
Объясните плиз что я делаю не так?

Автор: svetsmirnova 1.2.2006, 12:58
Откомпилировала этот код: всё работает. Нужно посмотреть заголовки, которые сервер реально отдаёт браузеру. Сделать это можно, например, при помощи плугина Live HTTP headers к FF.
Берут его отсюда: http://livehttpheaders.mozdev.org/

Автор: _hunter 1.2.2006, 12:58
ты не в тот раздел запостил -- нужно куда-нить в администрирование/веб-приложения...

а ошибка потому, что апач считает твой .exe-шник текстовым скриптом

Автор: chaos 1.2.2006, 13:28
я надеюсь Apache то хоть стоит на винде?

Автор: azesmcar 1.2.2006, 13:55
WhiteSpirit с printf -ами у тебя все в порядке..подозреваю что void main() надо заменить на int main()

попробуй так
Код

#include <stdio.h>
#include <conio.h>
int main(int argc, char **argv)
{
        printf("Content-Type: text/html\n");
        printf("\n");
        printf("<html>");
        printf("<h1>Hello world</h1>");
        printf("</html>");
        return 0;
}

Добавлено @ 13:57
Цитата

я надеюсь Apache то хоть стоит на винде?


smile под линукс этот код и компилироваться не будет...

Автор: WhiteSpirit 1.2.2006, 13:58
Апачь на юниксе и HTTP/1.0 200 Ok\r\nContent-Type: test/html\r\n\r\n тоже не помогает

Автор: azesmcar 1.2.2006, 13:59
да, и не забудь скопировать cgi файл в $APACH_ROOT/cgi-bin а не в $APACH_ROOT/httpdocs
Добавлено @ 14:00
Цитата

Апачь на юниксе и HTTP/1.0 200 Ok\r\nContent-Type: test/html\r\n\r\n тоже не помогает


ну и как ты думаешь твой apach под юникс будет запускать exe приложения?

Автор: svetsmirnova 1.2.2006, 14:02
>у и как ты думаешь твой apach под юникс будет запускать exe приложения?
А ему не пофигу какое расширение у скрипта?
WhiteSpirit
Заголовки посмотрел? Компилируешь на той же машине, что и Апач? И _hunter, похоже, совершенно прав.

Автор: azesmcar 1.2.2006, 14:06
Цитата

А ему не пофигу какое расширение у скрипта?


что значит расширение? ему то пофигу, но вот системе не пофигу...дело не в расширении, а в том что exe компилировался под винду, а запускается под юникс...как ты себе это представляешь?
Добавлено @ 14:07
если на миг забыть о существовании wine

Автор: WhiteSpirit 1.2.2006, 14:08
Заголовки ещё не посмотрел. Скачал щас посмотрю.

Компилировал у себя на винде. А тестирую на сервере хостинг-провайдера там юникс

Автор: azesmcar 1.2.2006, 14:11
Цитата

Компилировал у себя на винде. А тестирую на сервере хостинг-провайдера там юникс


ну о чем речь, в том то и дело...компилируй под юникс..
Добавлено @ 14:12
кстати для компиляции под юникс все же убери void main() и поставь int

Автор: WhiteSpirit 1.2.2006, 14:22
Дело осталось за малым:-) Поставить Юникс:-)

Автор: azesmcar 1.2.2006, 14:31
ну качай отсюда smile
http://80.86.232.128/cgi_script

я его откомпилировал...

Автор: _hunter 1.2.2006, 14:32
достаточно и линукса.

кстати ( на основе личного опыта ) могу посоветовать бросить это дело -- слишком много банальных вещей придется делать руками. если уж решил занятся web-программированием -- смотри лучше в сторону perl/php/asp(.net)

Автор: WhiteSpirit 1.2.2006, 14:35
_hunter
Так на пхп немного пишу просто заинтересовала возможность всё это на с/с++ делать (Уж больно они мне нравятся)
Ладно наверное придётся оставить эту затею. Ставить новую операционку ради этого...:-) не привлекает перспектива

Автор: azesmcar 1.2.2006, 14:39
Цитата

кстати ( на основе личного опыта ) могу посоветовать бросить это дело -- слишком много банальных вещей придется делать руками. если уж решил занятся web-программированием -- смотри лучше в сторону perl/php/asp(.net)


не скажи, мне лично больше CGI нравится...можно с самого начала написать свою библиотеку для работы и в дальнейшем писать с ее помощью...зато не OpenSource...и возможностей побольше на системном уровне чем у PHP..
но это спорный вопрос...

Автор: svetsmirnova 2.2.2006, 22:03
>Ставить новую операционку ради этого...:-) не привлекает перспектива
Зачем? На хостинге и собирай.
azesmcar
Вы оказались провидцем smile
>можно с самого начала написать свою библиотеку для работы и в дальнейшем писать с ее помощью...зато не OpenSource...и возможностей побольше на системном уровне чем у PHP..
В сотый раз писать разборщики запросов, кук и прочего? Ой.

Автор: WhiteSpirit 2.2.2006, 23:19
svetsmirnova
Это как так???

Автор: svetsmirnova 3.2.2006, 00:06
WhiteSpirit
Если собрался писать сайты на С, выбирай хостинг с предустановленным gcc, грузи туда исходники (в директорию выше www-пространства) и собирай. Таких хостингов много, в том числе и дешёвых.

Автор: Empirik 3.2.2006, 10:25
Цитата(_hunter @ 1.2.2006, 14:32)
достаточно и линукса.

кстати ( на основе личного опыта ) могу посоветовать бросить это дело -- слишком много банальных вещей придется делать руками. если уж решил занятся web-программированием -- смотри лучше в сторону perl/php/asp(.net)

Можешь перечислить именно какие банальные вещи придеться делать? Я пока знаю только одну - это разбор строки запроса к серверу. Перечисли их как можно больше. smile

Автор: _hunter 3.2.2006, 12:14
разбор POST-запроса, передающего файл, контроль сесий.
а, вообще, такие вопросы лучше в тематические разделы задавать -- там много чего вспомнят...

Автор: Empirik 7.2.2006, 09:04
Цитата(_hunter @ 3.2.2006, 12:14)
разбор POST-запроса, передающего файл, контроль сесий.
а, вообще, такие вопросы лучше в тематические разделы задавать -- там много чего вспомнят...

Тогда встречный вопрос, в какой раздел, лучше всего отнести данную тему. Ведь нету раздела CGI програмирование yf C++

Автор: azesmcar 7.2.2006, 09:58
Цитата

разбор POST-запроса

Работа на 20 минут
Цитата

передающего файл, контроль сесий.

еще пол дня smile

Что дальше...работа с СУБД...
несколько дней...

Цитата

В сотый раз писать разборщики запросов, кук и прочего? Ой.


Не xочешь писать скачай из интернета...там полно готовыx решений...
Добавлено @ 10:01
А вообще Empirik прав...может стоит создать раздел CGI программирование? и там подразделы C++, Perl, ...

П.С. Я для себя библиотеку написал...надо еще кое что добавить...Закончу думаю стоит выставить spec на всеобщее обозрение...на оценку...

Автор: Empirik 7.2.2006, 11:10
Цитата(azesmcar @ 7.2.2006, 09:58)
Цитата

разбор POST-запроса

Работа на 20 минут
Цитата

передающего файл, контроль сесий.

еще пол дня smile

Что дальше...работа с СУБД...
несколько дней...

Цитата

В сотый раз писать разборщики запросов, кук и прочего? Ой.


Не xочешь писать скачай из интернета...там полно готовыx решений...
Добавлено @ 10:01
А вообще Empirik прав...может стоит создать раздел CGI программирование? и там подразделы C++, Perl, ...

П.С. Я для себя библиотеку написал...надо еще кое что добавить...Закончу думаю стоит выставить spec на всеобщее обозрение...на оценку...

Если можешь, то дай пожалуйста кусок кода, который обрабатывает, приход файлов от клиента, а то строку запроса я научился разбирать, это довольно просто, но вот как обрабатывать файлы пришедшие от клиента я, пока, не знаю. За ранее большое спасибо

Автор: _hunter 7.2.2006, 11:25
а зачем ее куда-то переносить?
как тут уже писали -- разбор запроса -- работа на 20 минут.
( хотя я говорил о передаче файла smile )
а все остальные вопросы, которые у тебя появятся -- будут вопросы по твоей библиотеке ( о которой никто не знает и ( соответственно ) никто не сможет на них ответить )
а какие-то обще-теоретические вопросы ( хотя что это может быть?.. ) задавай в том же PERL' е: http://forum.vingrad.ru/index.php?showforum=183

насчет раздела... есть такой. Web-программирование называется...

Автор: azesmcar 7.2.2006, 11:26
Цитата

Если можешь, то дай пожалуйста кусок кода, который обрабатывает, приход файлов от клиента, а то строку запроса я научился разбирать, это довольно просто, но вот как обрабатывать файлы пришедшие от клиента я, пока, не знаю. За ранее большое спасибо


Вот именно это и надо добавить smile и еще работу с cookies...
На дняx посмотрю, будут мысли пришлю...если не ошибаюсь эти файлы сам сервер принимает...а тебе лишь надо выяснить куда он скопировал...путь к файлу должен передаваться через env...
Добавлено @ 11:32
Цитата

( хотя я говорил о передаче файла  )
а все остальные вопросы, которые у тебя появятся -- будут вопросы по твоей библиотеке ( о которой никто не знает и ( соответственно ) никто не сможет на них ответить )


а разве я задавал вопросы по своей библиотеке? Где??? Не вижу я чего то smile
Разумеется я не задам вопрос извините, вы не знаете какие параметры принимает функция которую я написал в прошлом году??? меня особенно второй параметр интересует...Я выражаю свое мнение насчет CGI...может я уподобюсь изобретателью велосипеда но все же...люблю все писать своими руками...к тому же учитываю тот факт что у меня аллергия на PHP...

Цитата

( хотя я говорил о передаче файла  )


особой разницы нет smile как уже сказал не думаю что это очень уж сложно..до этой части еще не добрался...но теxнической проблемы не вижу...

Автор: Empirik 7.2.2006, 12:11
Цитата(_hunter @ 7.2.2006, 11:25)
а зачем ее куда-то переносить?
как тут уже писали -- разбор запроса -- работа на 20 минут.
( хотя я говорил о передаче файла smile )
а все остальные вопросы, которые у тебя появятся -- будут вопросы по твоей библиотеке ( о которой никто не знает и ( соответственно ) никто не сможет на них ответить )
а какие-то обще-теоретические вопросы ( хотя что это может быть?.. ) задавай в том же PERL' е: http://forum.vingrad.ru/index.php?showforum=183

насчет раздела... есть такой. Web-программирование называется...

Програмирование cgi на c++ отличатся от програмирования на perl хотя бы API, поэтому тему по програмированию cgi на с++ мне кажется нужно вынести в отдельный топик. Ведь ты не будешь спорить, что с++ и perl это две разные вещи.

Автор: _hunter 7.2.2006, 12:58
рограммирование CGI на C/C++ ничем не отличаетсяот программирования на Perl. отличается системное программирование ( потому как вызовы идут к *nix' ам )
но для этого уже есть разделы.
пожтому такой раздел не нужен

Автор: azesmcar 7.2.2006, 13:57
Цитата

рограммирование CGI на C/C++ ничем не отличаетсяот программирования на Perl. отличается системное программирование ( потому как вызовы идут к *nix' ам )
но для этого уже есть разделы.


С этим в принципе согласен...без разницы на чем писать именно CGI-script на С++ или на Perl...
Но общие теоретические понятия обсуждать в разделе Web программирования не очень то удачно на мой взгляд так как в разделе Web программирования нет раздела CGI (если не ошибаюсь)...А к примеру вопрос который связан именно с CGI программированием, а не с системными вызовами и тому подобному (к примеру та же отправка файла) под каким разделом должны обсуждаться??? Не в PHP же? И мало web программистов имеют понятие о том как работает тот же PHP откуда берет отправленные параметры, как реализованы сессии и тому подобное...потому думаю не с подразделами С++, Перл и.т.д. но просто раздел Cgi нужно открыть..а вообще это уже перешло во флэйм...тема больше подxодит к разделу обсуждение форума... smile

Автор: WhiteSpirit 7.2.2006, 19:20
Кстати я тоже за то чтобы создать отдельный раздел под с++ cgi (либо здесь либо вweb программировании cgi), я думаю многим будет интересно, я бы вот не прочь поочиться, поскоку я в этом совершенно ничего не понимаю.
У
azesmcar'a есть уже статейки.

Вобщем я думаю дело пойдёт, а тему на самом деле надо переносить в обсуждение форума и там дальше её обсудить.

Автор: Empirik 8.2.2006, 11:02
Уважаемые форумчане мы так и не ответили на один важный вопрос: как же всетаки обрабатывать multipart данные пришедшие от формы

Автор: Ignat 8.2.2006, 14:30
Цитата(Empirik @ 8.2.2006, 11:02 Найти цитируемый пост)

Уважаемые форумчане мы так и не ответили на один важный вопрос: как же всетаки обрабатывать multipart данные пришедшие от формы

Если всё-таки есть необходимость писать свой разборщик заголовков, то можно посмотреть, как реализовано http://directory.fsf.org/GNU/cgicc.html. Но я бы стал ипользовать эту библиотеку.

[offtop]
Цитата

Оставь надежду всяк сюда входящий,

Empirik, интересная подпись, помнится видел такую над входом в одну из Чусовских пещер.
[/offtop]

Автор: Empirik 9.2.2006, 21:14
В общем если кому то еще интересно, то вот пример
Код


#ifdef WIN32
#include "stdafx.h"
#endif


#ifndef WIN32
#include <iostream>  
#endif
#include <stdio.h>

using namespace std;
#ifdef WIN32
int _tmain(int argc, _TCHAR* argv[])
#endif
#ifndef WIN32
int main(int argc, char* argv[])
#endif
{
    cout<<"Content-type: text/html\n\n";
    cout<<"<html>\n\t<body>\n";
    cout<<"\t\t<form name=\"main\" method=\"post\" enctype=\"multipart/form-data\">\n";
    cout<<"\t\t\t <input type=\"FILE\" name=\"IMAGE\"/><br/>\n";
    cout<<"\t\t\t <input type=\"FILE\" name=\"IMAGE\"/><br/>\n";
    cout<<"\t\t\t <input type=\"hidden\" name=\"test\" value=\"test1\"/><br/>\n";
    cout<<"\t\t\t <input type=\"submit\" name=\"ok\" value=\"Принять\"/>\n";
    cout<<"\t\t</form>\n\t\t<br/>\n";
    cout<<" метод запроса "<<getenv("REQUEST_METHOD")<<"<br/>";
    cout<<" метод запроса POST "<<(getenv("REQUEST_METHOD")=="POST")<<"<br/>\n";
    string method=getenv("REQUEST_METHOD");
    string post="POST";
    int test=method.compare(post);
    cout<<" метод запроса POST другой спсоб "<<test<<"<br/>\n";
    cout<<"<pre>\n";
    if(method.compare(post)==0)
    {
        cout<<"длинна запроса "<<getenv("CONTENT_LENGTH")<<"\n";
        char* buf=new char[atoi(getenv("CONTENT_LENGTH"))];
        memset(buf,1,atoi(getenv("CONTENT_LENGTH")));
        size_t i=0;
        size_t size=atoi(getenv("CONTENT_LENGTH"));
        fread(buf,size,1,stdin);
        cout<<"\nНачал цикл\n";
        cout<<strlen(buf);
        cout.flush();
        while(i<size)
        {
            cout.write(&buf[i],1);
            i++;
            cout.flush();
        }
        delete buf;
    }
    cout<<"\t\t</pre>";
    cout<<"\t</body>\n";
    cout<<"</html>\n";
    return 0;
}

Все данные поланные при POST запросе перенаправлюятся во входной поток программы. PS. У меня Apache 2 под виндой, этот кад не работает, не выдает тест файлов. Этот же код откомпелированный под SUSE Linux 10 работает на ура.

Автор: Basil777 24.2.2006, 23:06
А как второй файл обрабатывается?

Автор: Voronin_Igor 7.11.2009, 23:21
Сам начал писать CGI на С++ не так все и сложно, вот только материалу по этой теме очень мало что касается работы со строками то стандартный с++ а вот с передачей файлов изображений то пока для меня это проблема которую решаю.
 
Цитата(azesmcar @  7.2.2006,  11:57 Найти цитируемый пост)
CGI на C/C++ ничем не отличается от программирования на Perl

да также как украинский и русский или С++ и Java мне кажется если бы был бы топик CGI c разделами C++ и Perl было бы удобней, но это моё личное мнение. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)