Dennis: Ruby und Strato

Beitrag lesen

Hi frankx,

Wie kann ich mir die Interaktion mit einer CGI-Anwendung denn vorstellen? Der Server erkennt an der Dateiendung, welches Programm der  damit ansprechen möchte, bzw. um Interpretation bittet, und erwartet dann seinerseits eine Rückgabe, die dem HTT-Protokoll entspricht? Und wenn es den geforderten Konventionen wiederspricht, gibt es einen internen Serverfehler?

Hm, jein - es gibt da verschiedene Möglichkeiten:

  1. Man sagt dem Server (d.h. dem Apache-Webserver) alle Dateien im
       Verzeichnis X (meist cgi-bin, „CGI Binaries”) sollen ausgeführt werden -
       dafür muss man dann auch das X-Bit (also die Ausführrechte) für die Datei
       setzen. Der Server guckt dann, ob es sich bei der Datei um eine
       ausführbare Datei handelt (unter Windows spricht man von einer
       .exe-Datei, aber unter Linux ist die Dateinendung egal - x-Bit gesetzt
       heißt ausführbar… grob gesagt *g*) - ist dem so, so wird sie einfach
       direkt ausgeführt. Andernfalls guckt sich der Server die erste Zeile der
       Datei an - die muss den Pfad zu einer gültigen ausführbaren Datei
       enthalten - dieser Datei, oder besser gesagt diesem Programm wird dann
       der komplette nachfolgende Inhalt zum abarbeiten übergeben.
  2. Man konfiguriert den Apache-Webserver so, dass er automatisch alle
       Dateien mit der Endung .x an das Programm y übergibt - also z.B. alle
       .php Dateien automatisch an /usr/bin/php oder so - das erspart den Leuten
       die auf dem Server PHP nutzen, dass Sie bei jedem PHP-Script in die erste
       Zeile #!/usr/bin/php schreiben müssen ;-)

Ich hatte ja wohl fälschlicherweise vermutet, dass der einfach unbesehen ausspuckt, was das Programm zurückgibt an Text und dann wäre es ja Browserproblem, damit umzugehen, wenn kein Content-Type vorhanden ist.

Der Server hat dir vermutlich einen Internal Server Error angeguckt - in diesem Fall solltest du immer in die error.log Datei des Apaches gucken, da steht nämlich meist eine genauere Fehlerbeschreibung drin. Wenn du nicht weißt wo diese error.log ist, frag deinen Provider - wenn dieser dir keine zur Verfügung steht, dann wechsel den Provider.

In deinem Fall dürfte die altbekannte Meldung „Premature End of Script Headers” in der error.log gestanden haben - das deutet meist darauf hin, dass das CGI-Script nicht alle notwendigen Header gesendet hat.

\r wie auch \n steht hierbei lediglich als Platzhalter für die „wirklichen” Zeilenumbrüche.

Und was ist ein wirklicher Zeilenumbruch, ein ASCII-Wert?

Ja, es handelt sich hierbei um „Schriftzeichen” wie Buchstaben auch und welche in ASCII enthalten sind - du kannst sie lediglich nicht sehen, weshalb man sie (zusammen mit Leerzeichen u.a.) auch Whitespaces nennt.

AFAIK handelt es sich um die ASCII-Werte 10 und 13 - wobei ich jetzt nicht weiß welcher davon \r und welcher \n entspricht…

MfG, Dennis.

--
Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
Patch zur Verwendung von PATHINFO in JLog
Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)