html cgi



  • Shade Of Mine schrieb:

    Die Form schickt dich ja auch die naechste Seite und das ist bei dir ClearList.cgi

    Diese Datei willst du aber nicht anzeigen - also ersetze das Form action durch ein onsubmit event wo du wie in IncDec ClearList.cgi asynchron aufrusft.

    Weiters musst du natuerlich auch den Apachen korrekt konfigurieren dass er das CGI auch korrekt versteht.

    Nun kommt zumindest nicht mehr der Speichern unter Dialog, das Programm scheint aber nicht ausgeführt zu werden.

    Options +ExecCGI
    AddHandler cgi-script .cgi

    Wo muss ich das ganze eintragen? der Apache läuft bei mir unter Linux auf einem
    Raspberry pi.

    Ich habe gelesen das es da ein httpg.conf gibt, die Datei finde ich aber nicht.
    Ich finde aber jedemenge apache2 Ordner, heist die Datei vieleicht anders?

    Eine andere Frage ist natuerlich: warum willst du C fuer sowas verwenden?

    Da ich in C,C++ sowie C# zuhause bin, meinst Du man sollte da eher PHP nutzen.



  • hermes schrieb:

    Ich habe gelesen das es da ein httpg.conf gibt, die Datei finde ich aber nicht.

    Du meinst wohl httpd.conf? Die Datei sollte unter /etc/httpd/httpd.conf zu finden sein. Es ist übrigens üblich CGI-Programme in einem Unterverzeichnis namens cgi-bin zu speichern, siehe hier für mehr Informationen zur Konfiguration.



  • Hallo,

    natürlich meine ich httpd.conf.

    Suche ich von root aus find -name httpd.conf wird nichts gefunden.
    Finde aber jede menge apache2 ordner unter anderem /etc/apache2/
    dort finde ich apache2.conf, ports.conf sowie noch den ordner conf.d mit mehreren
    dateien. Wie gesagt httpd.conf finde ich aber nicht.


  • Mod

    Naja, dann mach dich bei deinem System mal schlau wie du den Apachen konfigurieren kannst.

    uU ist die apache2.conf ja die passende Datei oder aber auch im conf.d Ordner - denn dort sollten eigentlich die sites configs liegen.

    uU reicht ja auch eine .htaccess im Verzeichnis der cgi Datei.

    Welches Linux verwendest du denn?



  • Shade Of Mine schrieb:

    Welches Linux verwendest du denn?

    uname -a
    Linux raspberrypi 3.6.11+ #538 PREEMPT Fri Aug 30 20:42:08 BST 2013 armv6l GNU/Linux

    uU ist die apache2.conf ja die passende Datei oder aber auch im conf.d Ordner - denn dort sollten eigentlich die sites configs liegen.

    apache2.conf sieht schon mal ganz gut aus.

    .......
    # Global configuration

    # ServerRoot: The top of the directory tree under which the server's
    # configuration, error, and log files are kept.

    # NOTE! If you intend to place this on an NFS (or otherwise network)
    # mounted filesystem then please read the LockFile documentation (available
    # at URL:http://httpd.apache.org/docs/2.2/mod/mpm_common.html#lockfile);
    # you will save yourself a lot of trouble.

    # Do NOT add a slash at the end of the directory path.

    #ServerRoot "/etc/apache2"

    # The accept serialization lock file MUST BE STORED ON A LOCAL DISK.

    LockFile ${APACHE_LOCK_DIR}/accept.lock

    # PidFile: The file in which the server should record its process
    # identification number when it starts.
    # This needs to be set in /etc/apache2/envvars

    PidFile ${APACHE_PID_FILE}

    # Timeout: The number of seconds before receives and sends time out.

    Timeout 300

    # KeepAlive: Whether or not to allow persistent connections (more than
    # one request per connection). Set to "Off" to deactivate.

    KeepAlive On
    ........

    Muss ich da

    Options +ExecCGI
    AddHandler cgi-script .cgi

    einfach unten dran hängen?

    uU reicht ja auch eine .htaccess im Verzeichnis der cgi Datei.

    Meinst Du eine Datei mit dem Namen .htaccess?


  • Mod

    Schau dir mal die Doku hier an:
    http://httpd.apache.org/docs/2.2/mod/mod_cgi.html



  • Habe nun mal folgendes in apache2.conf angehängt.

    LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
    Alias /cgi-bin/ /cgi-bin/
    <Location /cgi-bin >
    SetHandler cgi-script
    Options ExecCGI
    </Location> 
    AddHandler cgi-script .cgi
    

    Im Linux root gibt es den Ordner cg-bin mit dem File Test.cgi. sowie allen rechten.
    Der Browser meldet
    The requested URL /cgi-bin/Test.cgi was not found on this server.

    Bei der google suche bin ich dann auf /usr/lib/cgi-bin gestoßen.

    nach ändern von apache2.conf

    LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
    Alias /cgi-bin/ /usr/lib/cgi-bin/
    <Location /cgi-bin >
    SetHandler cgi-script
    Options ExecCGI
    </Location> 
    AddHandler cgi-script .cgi
    

    Wird mein c Programm dann schon mal ausgeführt.

    ...
    <form method="get" action="/cgi-bin/Test.cgi">	
    <div id="x"><b></b></div>
    <b></b>
    <input type="submit" name="btnTest" value="Test">
    ...
    

    Irgendwo muss da wohl in apache2.conf noch das Verzeichniss /cgi-bin hinzugefügt werden.
    ps. Die apache Doku finde ich ziemlich katastrophal.

    Beendet wird das Programm mit

    printf("HTTP/1.0 302 OK\n");
    	return 0;
    

    Was beim Browser
    The server encountered an internal error or misconfiguration and was unable to complete your request.
    meldet.

    Was muss den da zurückgegeben werden.



  • hermes schrieb:

    Beendet wird das Programm mit

    printf("HTTP/1.0 302 OK\n");
    	return 0;
    

    Was beim Browser
    The server encountered an internal error or misconfiguration and was unable to complete your request.
    meldet.

    Was muss den da zurückgegeben werden.

    Du mußt dem Browser ja auch eine neue URL mitgeben. Woher soll er die denn sonst kennen?

    Also z.B.:

    printf("HTTP/1.0 302 OK\n");
          printf("Location: /MyApp/index.html\n");
          return 0;
    

    mfg Martin



  • mgaeckler schrieb:

    Also z.B.:

    printf("HTTP/1.0 302 OK\n");
          printf("Location: /MyApp/index.html\n");
          return 0;
    

    Der Location -Header muss absolut angegeben werden



  • zwutz schrieb:

    mgaeckler schrieb:

    Also z.B.:

    printf("HTTP/1.0 302 OK\n");
          printf("Location: /MyApp/index.html\n");
          return 0;
    

    Der Location -Header muss absolut angegeben werden

    Stimmt, aber das kann der Server aber erst liefern, wenn er das host-feld bekommt oder im get eine absolute URL bekommen hat. Das host-feld gibt es aber erst seit http/1.1 und meines Wissens können alle Browser auch mit relativen Locationangaben umgehen.

    mfg Martin


Anmelden zum Antworten