cgi in Homeverzeichnissen ausführen
Hallo,
ich bin schon lange am Basteln, aber leider ratlos.
System Suse 8.0: Apache 1.3.23
Habe ein Mini-cgi zum Testen:
#!/usr/bin/perl -w
use CGI; # CGI-Routinen laden.
$q = new CGI; # Neues CGI-Objekt erzeugen.
print $q->header, # HTTP-Header generieren.
$q->start_html('Hallo Welt'), # HTML einleiten.
$q->h1('Hallo Welt'), # Level-1-Header
$q->end_html; # HTML abschließen.
Das gibt aus: Hallo Welt
(in /usr/local/httpd/cgi-bin)
Das funktioniert wunderbar.
Wenn ich das aber nun im Homeverzeichnis eines Users ausführen will kommt
folgendes:
Premature end of script headers: /home/elmar/public_html/cgi-bin/welt.cgi
Ich kenne die Fehlermeldung vom Setzen falscher Attribute, z.B.
cgi-bin/test (und eines oder beide Verzeichnisse auf 777)
Aber:
- Upload im des Scripts ASCII-Mode (auch per Konsole testweise das
funktionierende Script rüberkopiert)
- im Verzeichnis .../public_html das Directory cgi-bin erstellt und 755
gesetzt, ebenso das welt.cgi
- in der suse_public_html.conf folgendes eingetragen: (auch testweise in
der httpd.conf), aber beides fruchtlos
Hallo,
Aber: - Upload im des Scripts ASCII-Mode (auch per Konsole testweise das funktionierende Script rüberkopiert) - im Verzeichnis .../public_html das Directory cgi-bin erstellt und 755 gesetzt, ebenso das welt.cgi
Sind Owner/Gruppenzugehörigkeit von Script und Ordner die gleichen, sonst gehts glaube ich nicht. MfG Dieter
Elmar wrote:
print $q->header, # HTTP-Header generieren. [...] Premature end of script headers
Fertige Lösung habe ich leider keine. Aber die Fehlermeldung "Premature end ..." deutet darauf hin, daß der apache in der Ausgabe Deines CGIs ein einleitendes "Content-type: text/html\n\n" sucht, aber nicht findet. Ralph
At 22:28 18.09.2002, you wrote:
Elmar wrote:
print $q->header, # HTTP-Header generieren. [...] Premature end of script headers
Fertige Lösung habe ich leider keine. Aber die Fehlermeldung "Premature end ..." deutet darauf hin, daß der apache in der Ausgabe Deines CGIs ein einleitendes "Content-type: text/html\n\n" sucht, aber nicht findet.
Aber das Script funktioniert ja in /usr/local/httpd/cgi-bin Sehr seltsam...
Tach auch, Elmar:
Aber das Script funktioniert ja in /usr/local/httpd/cgi-bin
Ich tät mal so vermuten: Du darfst keine CGIs in ~user/cgi-bin ausführen. Gar keine. Weder falsche noch richtige. Testweise mal das hier ausprobieren: #!/usr/bin/perl print ("Content-type: text/html\n\n"); print "Hallo"; einmal als "test.pl", einmal als "test.cgi". chmod 755 ist klar, und prüfe mit "which perl", ob der Pfad in der ersten Zeile auch stimmt. Außerdem mal an der Shell _mit Pfadangabe_ checken, also nicht: perl -c test.pl sondern explizit: /usr/bin/perl -c test.pl Wirf mal ein Auge in alle Logfiles in /var/log/httpd, da steht irgendwo was, je nach Config in error_log, suexec.log (oder so). Das "überall freigeben" von cgis unter'm Apache ist auch so 'ne Sache, die ich nie wirklich hingekriegt habe, trotz sklavischen Befolgens der Anleitung unter apache.org. Vielleicht 'n Suse-Special, keine Ahnung. Gruß, Ratti -- http://www.gesindel.de - Fontlinge - Die Fontverwaltung fuer Linux Fontmanagement for Linux
Joerg Rossdeutscher
Das "überall freigeben" von cgis unter'm Apache ist auch so 'ne Sache, die ich nie wirklich hingekriegt habe, trotz sklavischen Befolgens der Anleitung unter apache.org. Vielleicht 'n Suse-Special, keine Ahnung.
Ich hab' einfach folgendes in der /etc/httpd/httpd.conf: ScriptAlias /mgi-bin/ "/home/martins/public_html/cgi-bin/" Das erlaubt, mittels "http://localhost/mgi-bin/test.pl", CGIs direkt unterhalb von "~/public_html/cgi-bin/" auszuführen. -- martin-schmitz at web.de (Public Key ID: E7310780) ····································································· There are two major products that come out of Berkeley: LSD and UNIX. We don't believe this to be a coincidence. -- Jeremy S. Anderson
Moin, Martin Schmitz:
Ich hab' einfach folgendes in der /etc/httpd/httpd.conf:
ScriptAlias /mgi-bin/ "/home/martins/public_html/cgi-bin/"
Das erlaubt, mittels "http://localhost/mgi-bin/test.pl", CGIs direkt unterhalb von "~/public_html/cgi-bin/" auszuführen.
Das ist aber nicht "überall". :-) Ich finde dieses cgi-bin-Verzeichniss überaus lästig, und die Sinnhaftigkeit dieser Einrichtung wird ja selbst auf der Apache-Website gelegentlich in Frage gestellt. Ich mache inzwischen möglichst viel in PHP, da habe ich den Ärger nicht. Gruß, Ratti -- http://www.gesindel.de - Fontlinge - Die Fontverwaltung fuer Linux Fontmanagement for Linux
Hallo Ratti, hallo Leute, ich war eine Weile weg von der Liste, ich hoffe, ich schreibe jetzt nichts, was Ihr schon durchgekaut habt. Ich habe den Thread komischerweise auch nicht im Archiv gefunden.
Das ist aber nicht "überall". :-)
Ich finde dieses cgi-bin-Verzeichniss überaus lästig, und die Sinnhaftigkeit dieser Einrichtung wird ja selbst auf der Apache-Website gelegentlich in Frage gestellt.
Ich mache inzwischen möglichst viel in PHP, da habe ich den Ärger nicht.
Ungetestet:
Wenn in allen Home-Webverzeichnissen cgis ausgeführt werden sollen,
füge doch in der httpd.conf im Abschnitt
Hallo Elmar, Am Mittwoch, 18. September 2002 20:02 schrieb Elmar:
print $q->header, # HTTP-Header generieren. $q->start_html('Hallo Welt'), # HTML einleiten. $q->h1('Hallo Welt'), # Level-1-Header $q->end_html; # HTML abschließen.
Sorry, ich bin selbst in dieser Materie noch ziemlich neu. Aber ich habe bisher immer header () anstelle von header geschrieben und end_html () anstelle von end_html. Und sind die einfachen Anführungsstriche (') hier richtig? Ich benutze immer die doppelten ("). Aber vielleicht spielt das ja auch garkeine Rolle... Gruß von Heimo -- Heimo Ponnath Webdesign, Rotenhäuserstr. 51, 21109 Hamburg Tel: 040-753 47 95,Fax: 040-752 68 03, http://www.heimo.de/
On Thu, 19 Sep 2002 at 01:38 (+0200), Heimo Ponnath wrote:
Am Mittwoch, 18. September 2002 20:02 schrieb Elmar:
print $q->header, # HTTP-Header generieren. $q->start_html('Hallo Welt'), # HTML einleiten. $q->h1('Hallo Welt'), # Level-1-Header $q->end_html; # HTML abschließen.
Sorry, ich bin selbst in dieser Materie noch ziemlich neu. Aber ich habe bisher immer header () anstelle von header geschrieben und end_html () anstelle von end_html.
Das ist egal. Wenn Perl schon weiß, dass start_html eine Funktion (bzw. hier eine Methode) ist, dann führt er die auch ohne die Klammern aus. Beispiel: =========== 1. Beispiel =============== #!/usr/bin/perl -w sub my_func () { print "Das ist meine Funktion\n"; } my_func; ======================================= => funktioniert =========== 2. Beispiel =============== #!/usr/bin/perl -w sub my_func { print "Das ist meine Funktion\n"; } my_func; ======================================== => funktioniert auch (diesmal ohne Prototyp) ========== 3. Beispiel ================= my_func; sub my_func { print "Das ist meine Funktion"; } ======================================== => funktioniert nicht =========== 4. Beispiel ================ my_func(); sub my_func { print "Das ist meine Funktion"; } ========================================= => funktioniert auch ============ 5. Beispiel ================= sub my_func; my_func(); sub my_func { print "Das ist meine Funktion"; } ========================================== => funktioniert Man kann das ohne weiteres auf OOP übertragen, schließlich gilt in Perl: Objekte sind Referenzen, Klassen sind Pakete und Methoden sind (Unter-)funktionen, s. 'Programmieren in Perl'.
Und sind die einfachen Anführungsstriche (') hier richtig? Ich benutze immer die doppelten ("). Aber vielleicht spielt das ja auch garkeine Rolle...
Ja. einfache Anf.z. => Variablen (und \n und so ein Zeug) werden nicht ersetzt doppelte Anf.z. => ... werden ersetzt Bsp: % perl -e "print '\n';" => gibt einen Backslash und ein n aus % perl -e 'print "\n";' => gibt Zeilenumbruch aus Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ "The last good thing written in C was Franz Schubert's Symphony No. 9." -- Werner Trobin
participants (8)
-
Bernhard Walle
-
dkroemer@t-online.de
-
Elmar
-
Heimo Ponnath
-
Joerg Rossdeutscher
-
Lutz Gehlen
-
Martin Schmitz
-
Ralph Müller