Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Perl/CGI » CGI mit C!!??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
27.06.2007, 18:40 Uhr
funk-electric



Hi @all!

Ich bin neu hier und hoffe mal das ich ins richtige Forum Schreibe!!??

Ich habe mir vor einigen Monaten das "C von A bis Z" Buch zugelegt um C zu lernen!
Das Buch habe ich größtenteils durchgearbeitet, wobei ich mich immernoch als Anfänger bezeichnen muss, da ich noch sehr wenig Praxiserfahrung habe und für viele Befehle etc. oft nochmal nachschlagen und nachlesen muss!


Ich würde in C gerne CGI Scripte programmieren. Allerdings finde ich so gut wie keine Tuturials dazu und in dem Buch ist die CGI Programmierung nur kurz beschrieben!

Wenn mir jemand ein Buch oder ein Toturial nennen könnte würde mir das schon sehr weiterhelfen, da ich, wenn ich danach google meistens nur auf Perl/CGI oder eben auf dieses Buch verwiesen werde!

Momentan bin ich dabei ein CGI - Script in C zu schreiben, das mir die IP, den Browser & die Uhrzeit des aktuellen Besuchers in eine MYSQL - Tabelle schreibt!
Allzuweit komme ich hierbei leider nicht und scheitere an der C-API!


Villeicht kann mir bei meinen Fragen aber auch hier Jemand direkt weiterhelfen?

Allgemein zu C/CGI würde mich mal interessieren wie groß der Geschwindigkeitsvorteil ist, im Vergleich zu einem in PHP oder Perl geschriebenen Script - bzw. gibt es überhaupt einen?
Ein Grund warum ich C/CGI verwenden will ist ja schließlich das es (denke ich mal!?) schneller ist und das der Code nicht einsehbar ist "wenn es z.B. um eine Passwortabfrage geht!"!

Wie sieht es mit dem Einbinden von CGI Dateien in HTML Dateien aus? Wenn ich z.B. ein JAVAScript einbinden will mache ich das ja über einen include befehl wie z.B.:

PHP 4:
<script language="JavaScript" src="script.js"></script>
! Gibt es sowas auch für CGI, das ich als Beispiel auf jeder HTML Seite die aufgerufen wird ein CGI Script einbinde das z.B. das obengenannte auslesen der IP und das reinschreiben in eine Datenbank übernimmt???

Kann ich in den HTML-Code den ich über "stout" ausgebe auch PHP-code schreiben???
Also das ich praktisch anstatt über die mysql Bibliothek für C (mit der ich nicht klar komme) z.B. sowas wie:
PHP 4:
mysql_connect($host, $user, $password);
reinschreibe, oder wird das dann vom Server nicht ausgeführt, da ich es in meinem CGI-Script über "stout" direkt an den Browser sende???


Für jegliche Hilfe wäre ich sehr dankbar!


MFG

Funk-Electric

Dieser Post wurde am 27.06.2007 um 18:47 Uhr von funk-electric editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.06.2007, 21:52 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hab den anderen doppelpost gesperrt.

ansonsten:

CGI ist eins der schnellsten methoden (wenn richtig angewendet) um dynamische webseiten zu generieren.

Perl und C dürften ungefähr gleichschnell sein (wenn perl korrekt dafür konfiguriert)

Ansonsten sieht man IMMER den HTML output - logisch irgendwo. bei PHP, Perl oder CGI unter C sieht man nie den Quellcode. Natürlich wenn man die Scripte selbst hat, kann man bei PHP und Perl relativ leicht den Code ansehen (außer man hat code-obfuscator benutzt) bei C als binary natürlich höchstens assembler-code.

das CGI-Programm wertet kein HTML aus, das macht jeweils der Client. d.h eine Webseite in CGI, PHP, Perl bindet immer dann ein Javascript ein, wenn der browser das eben in einer der möglichen Formen in der HTML-Seite die er fertig vom Server bekommt findet.

Ansonsten schachteln die Server die CGI-Aufrufe nicht, also du kannst nicht mit einem C Programm php-code ausgeben lassen und das dann nochmals ausführen. wird nicht funktionieren außer du fütterst den php-interpreter selbst nochmals von deinem C-Programm aus, was natürlich geschwindigkeit und serverleistung oh mass kostet.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.06.2007, 18:05 Uhr
funk-electric



Ok! Danke für Deine Antwort!

(Den Doppelpost wollte ich selbst löschen, war aber nicht berechtigt...sorry! Konnt mich nicht für das richtige Forum entscheiden und als es dann geschrieben war konnt ich es nicht mehr zurücknehmen!)

Naja das ganze bekräftigt meine Meinung! CGI in C geschrieben ist am schnellsten und der Quellcode ist (auch für den Provider) kaum einsehbar!!!

Ein Buchtip oder so habe ich leider immernochnicht!? Weiß niemand ein vernünftiges Buch das dass Thema CGI mit C aufgreift (in deutsch?)?
Alles was ich dazu finde sind immer nur kleine Kapitel darüber oder es wird nur ganz am Rande erwähnt!

Wenn mir Jemand ein Buch o.Ä. empfehlen könnte würde ich mich sehr freuen!?


MFG

Funk-Electric

Dieser Post wurde am 28.06.2007 um 18:09 Uhr von funk-electric editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.06.2007, 19:35 Uhr
Pler
Einer von Vielen
(Operator)


Ich glaube, hier steht was zu CGI drin:
Link

Und dann bin ich mal auf das hier gestoßen:
www.gnu.org/software/cgicc/cgicc.html
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.07.2007, 12:32 Uhr
funk-electric



Danke für die Links! Muss ich mal durchstöbern!

Habs jetzt auch endlich geschaft meine MYSQL Scripte zu linken!!!

Und es funktioniert auf meinem Heimischen PC, mit Debian Etch!
Allerdings, wenn ich das Script auf meinen Server lade, kommt vom Server (Apache/1.3.26) die Fehlermeldung:

"Internal Server errror"!!??


Hier ist mein Simples Script:


Code:
/* mysql1.c */

#include <stdio.h>

#include <stdlib.h>

#include </usr/include/mysql/mysql.h>




/* Funktionsprototypen */

void check_error(void);

void verbinden(void);

void verbindung_schliessen(void);

void db_waehlen(char *);




MYSQL *mysql;




/* Bricht bei Fehler (mysql_error != 0) das Programm ab */

void check_error(void)  {

   if (mysql_errno(mysql) != 0) {

      fprintf(stderr, "Fehler: %s\n", mysql_error(mysql));

      exit(EXIT_FAILURE);

   }

}




/* Baut eine Verbindung zum Datenbankserver auf.

* Passen Sie ggf. Usernamen und Passwort und, sofern

* andere Parameter benötigt werden, diese Ihren

* Umständen selbst an

*/

void verbinden(void)  {

   mysql=mysql_init(mysql);

   check_error();

   mysql_real_connect(mysql, "localhost", "root",

                      NULL, NULL, 0, NULL, 0);

   check_error();

}




/* Serververbindung wieder schließen und den Speicher für die

* Struktur MYSQL wieder freigeben */

void verbindung_schliessen(void)  {

   mysql_close(mysql);

}




/* Falls Datenbank bei der Funktion verbinden() nicht angegeben

* wurde oder Sie die Datenbank wechseln wollen, dann verwenden

* Sie diese Funktion */

void db_waehlen(char *db) {

   mysql_select_db(mysql, db);

   check_error();

}




int main (int argc, char **argv) {



  printf("Baue verbindung zur Datenbank auf ...\n\n");



  verbinden();







  verbindung_schliessen();





  return EXIT_SUCCESS;

}



Woran kann dies liegen? Also die Rechte sollten richtig gesetzt sein, wenn ich ein script ohne MYSQL auf dem Server ausführe funktioniert es! (Hab sie bei diesem Script auf 755)

Kann es vielleicht an einem Versionskonflikt hängen????

Server:

MySQL-Version: 4.0.18
Server: Apache/1.3.26
Server Protokoll: HTTP/1.1
Gateway Iinterface: CGI/1.1

Mein PC:

Apache/2.2.3 (Debian)
MYSQL-Version: 5.0

MFG

Funk-Electric
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.07.2007, 13:17 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
der kann das aufm Server nicht ausführen, da du wahrscheinlich deine binary hochgeladen hast und nicht dein cgi aufm server kompiliert hast.

du müsstest, um das von dir aus zum laufen zu kriegen, bei dir mysql 4.0.18 installieren, damit deine anwendung gegen diese linkt und nicht gegen die neuere 5er library.

Das ist halt der nachteil an C-Programmen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.07.2007, 19:58 Uhr
Pablo
Supertux
(Operator)


Du hast aber auch vergessen, die headers zu schicken


C++:
#include <stdio.h>
int main(int argc, char **argv)
{
    printf("Content-Type: text/html\n\r\n\r");
    ...
}



sonst läuft gar nichts. Die binary auf dem Server im CGI-BIN Verzeichnis muss auch ausführbar sein. Das musst du nicht vergessen.

edit:

Hier hast du ein kleines Bsp wie du an GET rankommst und parst


C++:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int i;
    char *env, to_parse[4096], *tok;
    printf("Content-type: text/html\n\n");

    printf("<html>\n<head><title>CGI-BIN Test</title></head>\n");
    printf("<body><pre>\n");

    for(i=0; i < argc; ++i)
    {
        printf("argv[%d] = %s\n", i, argv[i]);
    }

    env = getenv("QUERY_STRING");


    if(env)
    {
        strcpy(to_parse, env);
        tok = strtok(to_parse, "&");

        do
        {
            if(tok)
            {
                printf("%s\n", tok);
                tok = strtok(NULL, "&");
            }
        } while(tok != NULL);
    }

    printf("</pre></body></html>");

    return 0;
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 08.07.2007 um 20:22 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.07.2007, 21:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


@Pablo: Oder man nutzt halt cgicc, das macht einem all das
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.07.2007, 01:03 Uhr
Pablo
Supertux
(Operator)


ich hab noch nie mit cgi Sachen gemacht, deswegen kenne ich mich nicht mit allem Möglichkeiten aus. Ich weiß nicht, was cgicc ist
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.07.2007, 08:10 Uhr
Pler
Einer von Vielen
(Operator)


Siehe oben:
www.gnu.org/software/cgicc/cgicc.html

Hier gibt's ein paar Code-Fetzen:
www.gnu.org/software/cgicc/doc/cgicc_tutorial.html


(Ich habe das allerdings auch noch nie selbst benutzt)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Perl/CGI ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: