hallo, wieder einmal ich. Jetzt habe ich nur noch eine Frage. Wie bring ich dem Apache CGI und PL bei. Laut Apache Buch geht das über die Script Alias, Wenn man dann die Internetseite http://192.168.0.43/default.html aufruft Dort klickt man normalerweise auf den Links, Systeminformation. Diese ist verlink mit /cgi-bin/informationen.cgi. Dieses Script sollte normalerweise die Perl Variablen ausgeben und ein paar Systeminfos. Nur es kommt immer HTTP 404 Seite wurde nicht gefunden. Error Log Mon Aug 18 17:11:42 2003] [error] [client 192.168.0.20] script not found or unable to stat: /usr/local/httpd/cgi-bin/information.cgi Hat das was mit Headern zu tun. Muss ich da mod-perl einsetzen oder geht es auch so. Weil manche Scripts in Perl finde ich besser als PHP. Würde mich über Infos freuen. Silvio
Hallo, Silvio Siefke wrote:
hallo, Dort klickt man normalerweise auf den Links, Systeminformation. Diese ist verlink mit /cgi-bin/informationen.cgi.
Dieses Script sollte normalerweise die Perl Variablen ausgeben und ein paar Systeminfos. Nur es kommt immer HTTP 404 Seite wurde nicht gefunden. Error Log Mon Aug 18 17:11:42 2003] [error] [client 192.168.0.20] script not found or unable to stat: /usr/local/httpd/cgi-bin/information.cgi ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^vergleiche mit oben. Typo?
gruß, sven
Hallo Silvio, Am Montag August 18 2003 15:17 schrieb Silvio Siefke:
wieder einmal ich. Jetzt habe ich nur noch eine Frage. Wie bring ich dem Apache CGI und PL bei.
Wie ist denn Dein System eingerichtet? Mein (SuSE-) Linux hat eine Apacheninstallation von den CDs, zusätzlich, da ich mit Perl arbeiten wollte, natürlich den Perl-Interpreter drinne und damit Apache was damit anfangen kann, mod_perl. mod_php auch, aber das lasse ich mal weg. Mit der Möglichkeit, über die CGI-Schnittstelle zu kommunizieren, ist Apache bereits ausgestattet. Darum mußte ich mich nicht kümmern. (Leider neige ich gerne mal zur Bequemlichkeit).
Laut Apache Buch geht das über die Script Alias,
Yup, das Stichwort ist wichtig. Damit ich meine Webspielereien betreiben kann, habe ich mir Virtuelle Hosts eingerichtet. (Du kennst die httpd.conf?). Damit jeder Host sein eigenes cgi-Verzeichnis hat, mußte ich das Skriptalias anlegen. Dann sucht der Apache nämlich an der richtigen Ecke.
Wenn man dann die Internetseite http://192.168.0.43/default.html aufruft
Dort klickt man normalerweise auf den Links, Systeminformation. Diese ist verlink mit /cgi-bin/informationen.cgi.
Dem kann ich nicht ganz folgen. Der Apache liefert auf Anfrage des Browsers eine Webseite. In dieser Webseite kann ein Link auf ein Programm stecken. Ruft der Benutzer das auf, nimmt der Apache diesen Request und schaut im Skriptverzeichnis nach. Im Skript steht drin, welcher Interpreter (oder auch Programm) aufgerufen werden muß. Diesen Aufruf nimmt die Shell, stößt den Interpreter an, der das Skript abarbeitet und die Ergebnisse an den Apachen weiterreicht. Dieser übergibt sie wiederum dem Browser.
Dieses Script sollte normalerweise die Perl Variablen ausgeben und ein paar Systeminfos. Nur es kommt immer HTTP 404 Seite wurde nicht gefunden.
Du verweist auf eine Stelle, die er nicht findet.
Error Log Mon Aug 18 17:11:42 2003] [error] [client 192.168.0.20] script not found or unable to stat: /usr/local/httpd/cgi-bin/information.cgi
Entweder weiß der Apache nicht, was er mit der Endung cgi anfangen soll (guck mal in die httpd.conf) oder Dein Skriptaufruf funktioniert nicht.
Hat das was mit Headern zu tun. Muss ich da mod-perl einsetzen oder geht es auch so.
Gute Frage. Es sollte auch ohne gehen, ich habe es aber nicht ausprobiert. mod_perl erlaubt das schnellere Bearbeiten solcher Skripten, nagle mich bitte nicht fest, das müßte ich nachlesen.
Weil manche Scripts in Perl finde ich besser als PHP.
Ich mag auch Perl lieber, PHP kann man aber schön in den HTML-Code mitreinschreiben.
Würde mich über Infos freuen.
Wir bräuchten Infos zum System, Deiner Apachen-Einrichtung, Auszüge aus der httpd.conf und vielleicht Beispielcode. Helga -- ## Content Developer OpenOffice.org: lang/DE ## Office-Suite für Linux, Mac, Windows -- http://de.openoffice.org/ ## Werkstatt & Information zu OpenSource -- http://www.eschkitai.de/ ## Offene Jobs -- http://www.eschkitai.de/openoffice/jobs.html
Hallo *From: "Helga Fischer" <Azula@gmx.de>
Wie ist denn Dein System eingerichtet? Suse Linux 7.3 Apache 1.3.27, perl 5.6.1
Der einzige ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/" Sonstige Einträge für CGI <Directory "/usr/local/httpd/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> <Location /cgi-bin> AllowOverride None Options +ExecCGI -Includes SetHandler cgi-script </Location> AddHandler cgi-script .cgi <IfModule mod_perl.c> <Location /perl-status> SetHandler perl-script PerlHandler Apache::Status order deny,allow deny from all allow from localhost </Location> #VirtualHost Eintrag <VirtualHost 192.168.0.43:80> ServerAdmin siefke@linux.siefke.ll DocumentRoot /home/siefke ServerName siefke.linux.siefke.ll ErrorLog /var/log/httpd/siefke-error_log CustomLog /var/log/httpd/siefke-access_log common <Directory /home/siefke/cgi-bin> Options ExecCGI SetHandler cgi-script </Directory> </VirtualHost> Script Beispiel #!/usr/bin/perl use CGI; require "get_help_function.cgi"; # template file my $templateFile = "../htdocs/template/information/information_de.html"; # Umgebungsvariablen ausgeben printoutValues(); exit(); sub printoutValues { my $out; my $value; my $line; my $max_row=40; my $css_class="cell2"; my $row_no=4; my ($template, $row) = loadTemplate($templateFile, 'INFO'); my @ENVSort = sort (keys %ENV); foreach $key (@ENVSort) { $value = $ENV{$key}; $line = $row; $row_no++; $css_class = ($css_class eq "cell1") ? "cell2": "cell1"; my $l = length($value); my $p = 0; my $va = ""; if ($l>$max_row) { while ($l>$max_row) { $va .= substr($value, $p, $max_row); $va .= '<br />'; $p = $p + $max_row; $l = $l - $max_row; } $va .= substr($value, $p); } else { $va = $value; } $line =~ s/\[CSS_CLASS\]/$css_class/ig ; $line =~ s/\[NR\]/$row_no/ig ; $line =~ s/\[KEY\]/$key/ig ; $line =~ s/\[VALUE\]/$va/ig ; $out .= $line; } $template = replaceTemplateArea($template, 'INFO', $out); print "Content-Type: text/html\n\n" ; print $template; } Gruß Silvio
Hallo Silvio, Am Montag August 18 2003 16:18 schrieb Silvio Siefke:
*From: "Helga Fischer" <Azula@gmx.de>
Wie ist denn Dein System eingerichtet?
Suse Linux 7.3 Apache 1.3.27, perl 5.6.1
Thx.
Der einzige ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/"
[Allgemeine Direktiven der httpd.conf]
#VirtualHost Eintrag <VirtualHost 192.168.0.43:80> ServerAdmin siefke@linux.siefke.ll DocumentRoot /home/siefke ServerName siefke.linux.siefke.ll ErrorLog /var/log/httpd/siefke-error_log CustomLog /var/log/httpd/siefke-access_log common
Warum setzt Du hier noch noch einmal das Skriptalias? ScriptAlias /cgi-bin/ /home/siefke/cgi-bin/ Dann sind die Skripten auch passend im Verzeichnis Deiner Webpage. Im Moment verwendest Du das Verzeichnis, das SuSE angelegt hat. Du mixt auf diese Weise aber Deine Dateien.
<Directory /home/siefke/cgi-bin> Options ExecCGI SetHandler cgi-script </Directory>
Diese Angaben wiederholen lediglich diejenigen aus der httpd.conf von oben. Brauchst Du sie?
</VirtualHost>
Script Beispiel #!/usr/bin/perl
use CGI;
require "get_help_function.cgi";
Wo befindet sich dieses Skript?
# template file my $templateFile = "../htdocs/template/information/information_de.html";
Sucht Dein Apache hier überhaupt? So ganz klar ist mir nicht, was Du machst. Alles, was zum Virtuellen Host gehört, muß auch dort liegen, wo der Apache reingucken darf. Das ist die DocumentRoot und das cgi-bin-Verzeichnis. Auf Verzeichnisse unterhalb der DocumentRoot verweist Du dann mittels ../mein/verzeichnis, das hängt von der Verschachtelungstiefe ab. Aber über dieses Verzeichnis hinaus in ein anderes geht nicht. Sonst könnte man ja mittels des Apachen überall auf einem System herumgucken.
# Umgebungsvariablen ausgeben
[Rest gesnippt, nur Skript] Helga -- ## Content Developer OpenOffice.org: lang/DE ## Office-Suite für Linux, Mac, Windows -- http://de.openoffice.org/ ## Werkstatt & Information zu OpenSource -- http://www.eschkitai.de/ ## Offene Jobs -- http://www.eschkitai.de/openoffice/jobs.html
Hallo, Silvio Siefke wrote:
Hallo
ErrorLog /var/log/httpd/siefke-error_log CustomLog /var/log/httpd/siefke-access_log common
Übrigens...Sehr hilfreich ist oft auch: ScriptLog /path/to/script_log Und im Perl-Script sollte dazu immer ein: use strict; stehen. Ohne funktioniert Perl gar nicht ;-) gruß, sven
participants (3)
-
Helga Fischer
-
Silvio Siefke
-
Sven Schupp