Perl aktivieren
Tom
- perl
Hello,
ich würde die nächsten Tage gerne noch nutzen, die ersten Schritte mit PERL zu machen. Dazu muss das aber erstmal laufen auf dem Server. Könnt Ihr mir da etwas Starthilfe geben?
Ich habe in der http.conf geblättert und gefunden, dass mod_cgi geladen und eingebunden wird. Was muss ich noch machen, damit PERL läuft?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
ich würde die nächsten Tage gerne noch nutzen, die ersten Schritte mit PERL zu machen. Dazu muss das aber erstmal laufen auf dem Server. Könnt Ihr mir da etwas Starthilfe geben?
Ich habe in der http.conf geblättert und gefunden, dass mod_cgi geladen und eingebunden wird. Was muss ich noch machen, damit PERL läuft?
CGI hat mit Perl erstmal nichts zu tun.
Ist Perl überhaupt installiert?
cu,
Andreas
Hello,
CGI hat mit Perl erstmal nichts zu tun.
Ist Perl überhaupt installiert?
Ja, Perl ist auf dem Host installiert und auf der Befehlszeile kann ich auch schon schön damit herumspielen. Nun will ich es dem Apachen noch beibringen. Lese da schon ne ganze Weile. z.B: http://aktuell.de.selfhtml.org/artikel/cgiperl/inbetriebnahme/index.htm#a4
Ich habe den Handler eingeschaltet und erhalte nun die Meldung
Forbidden
You don't have permission to access /~thomas/perl/starting/hallo_welt.cgi on this server.
Die rx-Rechte für Welt sind allerdings gesetzt
Wie kann ich dem Server noch sagen, dass er auch .pl akzeptieren soll?
AddHandler cgi-script .cgi .pl
Wäre das richtig so? einfach mit Leerzeichen dahinter?
Und müsste ich auch noch einen Type hinzufügen?
AddType text/html .pl .cgi ?
Was hat das mit den Options auf sich (siehe Cheatah-Posting)
Options ExecCGI
Wahrscheinlich fehlt dann nur noch das, oder?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
was muss ich hier ändern, damit PERL nur für einzelne Userverzeichnisse jeweils im Unterverzeichnis home/user/public_html/perl/ ausgeführt wird?
<IfModule mod_userdir.c>
UserDir public_html
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
</IfModule>
Liebe Grüße aus http://www.braunschweig.de
Tom
hi Tom,
was muss ich hier ändern, damit PERL nur für einzelne Userverzeichnisse jeweils im Unterverzeichnis home/user/public_html/perl/ ausgeführt wird?
Das ist ungenau formuliert. PERL _wird_ von deinem Rechner in jedem beliebigen Verzeichnis ausgeführt. Aber der Apache muß instruiert werden, ob er in bestimmten user-Verzeichnissen CGI-Scripts an PERL übergeben darf - oder eben nicht.
Definiere dir für _spezielle_ Verzeichnisse jeweils ein Alias und setze für das Directory +ExecCGI. Das sollte eigentlich reichen:
ScriptAlias /perl/ "/home/user/public_html/perl/"
<Directory "/home/user/public_html/perl/">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from ...
</Directory>
Grüße aus Berlin
Christoph S.
Hello,
ich bekomms nicht hin.
Eintrag aus dem Error-log:
[Tue Apr 13 21:13:42 2004] [error] [client 192.168.101.114] Premature end of script headers: /home/thomas/public_html/perl/s
tarting/hallo_welt.cgi
Liebe Grüße aus http://www.braunschweig.de
Tom
Halihallo Tom
ich bekomms nicht hin.
Sei ohne Sorge, es wird :-)
[Tue Apr 13 21:13:42 2004] [error] [client 192.168.101.114] Premature end of script headers: /home/thomas/public_html/perl/s
tarting/hallo_welt.cgi
... hat genau eine Ursache: Der Webserver bekommt kein gültiges Set
and HTTP-Headern. Anders als bei PHP bist du in Perl dazu genötigt,
diesen selber zu generieren:
print "Content-Type: text/html\015\012\015\012";
Falls diese (o.ä.) Zeile in deinem Script bereits existiert, könnte
es auch daran liegen, dass vor dieser Zeile bereits etwas anderes
ausgegeben wurde (und sei es nur eine Warnmeldung an STDERR).
Zeig mal dein wundersames hallo_welt.cgi.
Viele Grüsse
Philipp
Hello Philipp,
Falls diese (o.ä.) Zeile in deinem Script bereits existiert, könnte
es auch daran liegen, dass vor dieser Zeile bereits etwas anderes
ausgegeben wurde (und sei es nur eine Warnmeldung an STDERR).Zeig mal dein wundersames hallo_welt.cgi.
#!/usr/local/bin/perl -w
print("Content-Type: text/html\015\012\015\012");
print("Just another Perl hacker\n");
Habe die Zeile eingefügt, aber es ändert sich nichts. Der Browser sagt: Internal Server Error und im Error-Log sammeln sich die Zeilen wie gehabt.
Liebe Grüße aus http://www.braunschweig.de
Tom
#!/usr/local/bin/perl -w
ist dort deine Perl?
Struppi.
Hello,
#!/usr/local/bin/perl -w
ist dort deine Perl?
Ja. Da haust sie.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
#!/usr/local/bin/perl -w
ich nehme mal an, durch das -w wird Dir ...
print("Content-Type: text/html\015\012\015\012");
... der unnötige Listenkontext angemeckert. Was allerdings kein Grund sein soll, auf -w zu verzichten, im Gegenteil ;-)
Internal Server Error und im Error-Log sammeln sich die Zeilen wie gehabt.
Nun ja, zumindest weißt Du schon mal, dass Perl-Scripts über die CGI-Schnittstelle aus Serversicht prinzipiell aufgerufen werden können. Es kann also nur noch neunhundertneunundneunzigtausendneunhundertneunundneunzig Ursachen haben; angefangen bei einer anderen Stelle des Perl-Interpreters im Filesystem oder fehlenden Ausführungsrechten für den Server. Auf einer Linux-Shell sollte das Script direkt durch Aufruf nur mit dem Dateinamen ausführbar sein.
Cheatah
Halihallo Tom
Habe die Zeile eingefügt, aber es ändert sich nichts. Der Browser sagt: Internal Server Error und im Error-Log sammeln sich die Zeilen wie gehabt.
Dann würde mich auch deine Antwort auf Christophs Frage
interessieren, was genau ausgegeben wird, wenn du das Script auf
der Konsole startest (Interpreter am richtigen Ort, siehe Struppi).
Wie sieht die aktuelle httpd.conf aus, s. Christoph.
Viele Grüsse
Philipp
Hello,
Halihallo Tom
Habe die Zeile eingefügt, aber es ändert sich nichts. Der Browser sagt: Internal Server Error und im Error-Log sammeln sich die Zeilen wie gehabt.
Dann würde mich auch deine Antwort auf Christophs Frage
interessieren, was genau ausgegeben wird, wenn du das Script auf
der Konsole startest (Interpreter am richtigen Ort, siehe Struppi).
Da kommt ganz genau die angeforderte Ausgabe an STDOUT:
--------------------------
Content-Type: text/html
Just another Perl hacker
--------------------------
Liebe Grüße aus http://www.braunschweig.de
Tom
Halihallo Tom
Da kommt ganz genau die angeforderte Ausgabe an STDOUT:
Na, als wenn ich es nicht erwartet hätte... :-(
Nun ja, es kann wie Cheatah schon sagt leider verschiedene Ursachen
haben. Du lässt den Apachen unter der Gruppe wwwrun laufen, dein
Perl wird schon die Berechtigung read-execute für everyone haben (
und das Verzeichnis natürlich auch)? - Ich weiss es ist eine "dumme
Frage" (normalerweise ist dem immer so), aber theoretisch könnte es
sogar daran liegen.
Berechtigung des Script auf 0755? - Sorry, Fragen muss man :-)
Hm. Was fällt mir da sonst noch ein?
Naja, entweder das Script wird gar nicht erst ausgeführt, da der
Interpreter nicht da ist, oder es wird ausgeführt, jedoch vorher
ein unsinnvoller header gesendet. Woran könnte das noch liegen?
Also:
1. Step:
Schauen, ob das Script überhaupt ausgeführt wird. Schreib mal
folgendes und lass es über HTTP aufrufen:
----
#!/usr/local/bin/perl
print "Content-Type: text/html\015\012\015\012";
open( F, '>./test.txt' ); print F 'hello world'; close(F);
----
(ggf. erst auf der Konsole testen, ob es fehlerfrei ist)
Frage: Ist in dem Verzeichnis eine neue Datei test.txt angelegt
worden? - Dann wird das Script zwar ausgeführt, aber
irgendwas "funkt" dazwischen.
Wenn nein, müssen wir noch etwas tiefer greifen ;-)
Stepwise approach...
Viele Grüsse
Philipp
Halihallo Tom
[...]
Sind alle Verzeichnisse bishin zu deinem Perl-Script auf eine
Berechtigung eingestellt, die es selbst des wwwrun-Users zulässt,
diese zu öffnen (rx auf Everyone?).
Naja, dies würde zwar zu einem Permission denied im error_log führen,
ich versuche nur Tipps zu geben...
Viele Grüsse
Philipp
Halihallo Tom
[...]
Ist irgendeine log-Datei auf die magische Dateigrösse 2GB gestiegen?
Das mag das Dateisystem nicht ertragen und die Scripte brechen mit
der genannten Fehlermeldung ab. Normalerweise werden die logs stets
mit logrotate klein gehalten, aber bei einigen logs kann dies
ausfallen. Irgendein Apache-Log (error_log,access_log),
suexec_log, irgendeines?
Viele Grüsse
Philipp
hi,
ich bekomms nicht hin.
[Tue Apr 13 21:13:42 2004] [error] [client 192.168.101.114] Premature end of script headers: /home/thomas/public_html/perl/s
tarting/hallo_welt.cgi
"Premature end ..." kann auch andere Ursachen haben. Such mal danach im Archiv. Was passiert, wenn du exakt dasselbe script "hallo_welt.cgi" auf der Konsole aufrufst?
Aber: Falls du jetzt mein vorhin gegebenes Alias-Beispiel 1:1 übernommen hast, gilt der natürlich für
/home/thomas/public_html/perl
Er gilt _nicht_ (oder jedenfalls nicht unbedingt) gleichzeitig auch für
/home/thomas/public_html/perl/starting
Lade mal deine httpd. conf irgendwo auf eine temporäre Adresse hoch (wenns geht, ohne Kommentare), dann kann man sie sich mal anschauen.
Christoph S.
Hello,
Lade mal deine httpd. conf irgendwo auf eine temporäre Adresse hoch (wenns geht, ohne Kommentare), dann kann man sie sich mal anschauen.
So vergurkt, wie sie ist unter http://bitworks.de/~selfHTML/httpd.conf
BTW: mit welchem Werkzeug kann ich denn die Kommentare wegschneiden. Nehm ich da grep -v ?
Liebe Grüße aus http://www.braunschweig.de
Tom
hallo Tom,
Lese da schon ne ganze Weile. z.B: http://aktuell.de.selfhtml.org/artikel/cgiperl/inbetriebnahme/index.htm#a4
Sehr gut, das sollte dir etwas weiterhelfen.
You don't have permission to access /~thomas/perl/starting/hallo_welt.cgi on this server.
Möglicherweise brauchst du einen Alias für /~thomas/perl/starting/ in deiner httpd.conf.
AddHandler cgi-script .cgi .pl
Wäre das richtig so? einfach mit Leerzeichen dahinter?
Ja.
Und müsste ich auch noch einen Type hinzufügen?
AddType text/html .pl .cgi ?
Nein.
Was hat das mit den Options auf sich (siehe Cheatah-Posting)
Options ExecCGI
Das muß für das entsprechende Directory so vorgegeben werden, damit der Apache weiß, daß er CGI-Scripts ausführen lassen soll.
Grüße aus Berlin
Christoph S.
Hi,
Was muss ich noch machen, damit PERL läuft?
es installieren :-) Perl ist ein externer Interpreter, der insbesondere nichts mit einem Server zu tun hat. Der Server muss es "seinem Anwender" lediglich erlauben, einen solchen externen Interpreter zu starten. Schaue hierzu in der Apache-Doku nach Direktiven wie "Options ExecCGI" und "AddHandler cgi-script".
Cheatah
Hello,
also, dass ist ein Stochern mit der Nadel im Heuhaufen :-((
Ich finde nicht heraus, woran es liegt. Aber wahrscheinlich habe in der http.d.conf etwas doppelt und widersprüchlich konfiguriert.
Datei vom Testserver:
http://bitworks.de/~selfHTML/httpd.conf
Liebe Grüße aus http://www.braunschweig.de
Tom
Datei vom Testserver:
http://bitworks.de/~selfHTML/httpd.conf
Fass doch bitte noch mal zusammen was passiert.
Wie sieht das Skript jetzt aus?
Wie rufst du das Skript auf ?
Wie lautet die Fehlermeldung?
Struppi.
Hello und moin Struppi,
Fass doch bitte noch mal zusammen was passiert.
Wie sieht das Skript jetzt aus?
#!/usr/local/bin/perl -w
print("Content-Type: text/html \015\012\015\012");
print("Just another Perl hacker\n");
Das Script liegt jetzt in /home/thomas/public_html/perl
Wie rufst du das Skript auf ?
Über den Browser durch eingabe des Scriptnamens in der Adresszeile
Wie lautet die Fehlermeldung?
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, root@testserver.bitworks and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Und dort steht pro Aufruf drin:
[Wed Apr 14 09:15:04 2004] [error] (2)No such file or directory: exec of /home/thomas/public_html/perl/hallo_welt.cgi failed
[Wed Apr 14 09:15:04 2004] [error] [client 192.168.101.114] Premature end of script headers: /home/thomas/public_html/perl/h
allo_welt.cgi
Ich weiß nun nicht, welche Datei oder welches Verzeichnis der Apache nicht findet.
Liebe Grüße aus http://www.braunschweig.de
Tom
Was mir in deiner config auffällt:
ServerName testserver.bitworks
Ich hab keine Ahnung, aber du weißt was du da machst?
Bei mir steht:
ServerName 127.0.0.1
Und dort steht pro Aufruf drin:
[Wed Apr 14 09:15:04 2004] [error] (2)No such file or directory: exec of /home/thomas/public_html/perl/hallo_welt.cgi failed
[Wed Apr 14 09:15:04 2004] [error] [client 192.168.101.114] Premature end of script headers: /home/thomas/public_html/perl/h
allo_welt.cgi
du rufst das Skript mit http://localhost/perl/hallo_welt.cgi auf?
Klappt es auch nicht, wenn du die Datei in pl umbenennst?
Ich weiß nun nicht, welche Datei oder welches Verzeichnis der Apache nicht findet.
exec läßt darauf schliessen, das er das Skript nicht ausführen kann. Ich vermute mal er findet den Interpreter nicht (Ich weiß es aber nicht, da ich noch nie mit Linux gearbeitet habe).
Struppi.
Hi,
exec läßt darauf schliessen, das er das Skript nicht ausführen kann. Ich vermute mal er findet den Interpreter nicht (Ich weiß es aber nicht, da ich noch nie mit Linux gearbeitet habe).
Könnte aber auch auf fehlendes x-bit für den User, unter dem der Apache läuft, hindeuten (==> chmod 755 hallo_welt.cgi)
cu,
Andreas
Hello,
exec läßt darauf schliessen, das er das Skript nicht ausführen kann. Ich vermute mal er findet den Interpreter nicht (Ich weiß es aber nicht, da ich noch nie mit Linux gearbeitet habe).
Könnte aber auch auf fehlendes x-bit für den User, unter dem der Apache läuft, hindeuten (==> chmod 755 hallo_welt.cgi)
x-bit ist gesetzt.
Unter php läuft der Server auch.
Die Namensauflösung wird mittels hosts auf dem Client erledigt.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
Könnte aber auch auf fehlendes x-bit für den User, unter dem der Apache läuft, hindeuten (==> chmod 755 hallo_welt.cgi)
x-bit ist gesetzt.
Darf der User, unter dem der Apache läuft, den Perl-Interpreter ausführen?
Unter php läuft der Server auch.
???
cu,
Andreas
Hello,
Könnte aber auch auf fehlendes x-bit für den User, unter dem der Apache läuft, hindeuten (==> chmod 755 hallo_welt.cgi)
x-bit ist gesetzt.Darf der User, unter dem der Apache läuft, den Perl-Interpreter ausführen?
Der Perl-Interpreter hat auch 555 gesetzt. Das müsste doch eigentlich reichen. Auf der Konsole klappt das auch für jedermann.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
nun habe ich jeden Hinweis verfolgt und drei Tage lang google und Fireball gequält. Aber nix rührt sich. Das ist doch demotivierend!
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
nun habe ich jeden Hinweis verfolgt und drei Tage lang google und Fireball gequält. Aber nix rührt sich. Das ist doch demotivierend!
Du hast aber schon nach Änderungen in der httpd.conf den Apache jeweils neu gestartet, oder?
cu,
Andreas
Hello,
Du hast aber schon nach Änderungen in der httpd.conf den Apache jeweils neu gestartet, oder?
nein, wieesoh?
Liebe Grüße aus http://www.braunschweig.de
Tom
Du hast aber schon nach Änderungen in der httpd.conf den Apache jeweils neu gestartet, oder?
nein, wieesoh?
Damit die Änderungen aktiviert werden.
Struppi.
Hello,
Du hast aber schon nach Änderungen in der httpd.conf den Apache jeweils neu gestartet, oder?
nein, wieesoh?
Damit die Änderungen aktiviert werden.
ach soooo. Die Änderungen müssen auch aktiv werden.
Aber hast Du denn das große <I> nicht gesehen? *scnr*
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
nun habe ich jeden Hinweis verfolgt und drei Tage lang google und Fireball gequält. Aber nix rührt sich. Das ist doch demotivierend!
Mir fällt eigentlich nur ein, dass du dein Perl-Skript vielleicht einfach mal in das Verzeichnis packen solltest, was dafür vorgesehen ist laut httpd.conf-Default:
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
ScriptAlias /perl/ "/home/thomas/public_html/perl/"
<Directory "/home/thomas/public_html/perl/">
AllowOverride None
Options Indexes ExecCGI
Order allow,deny
Allow from all
</Directory>
/var/www/cgi-bin ist der Standard. Du sollst laut Anweisung diese Angabe ändern auf dein CGI-Verzeichnis.
Wenn man den Standard und deine Hinzufügung vergleicht, fällt eigentlich nur auf, dass normal "Options None" ist, und du "Options Indexes ExecCGI" hast.
Dumme Frage: Warum hast du ExecCGI, wenn es laut Standard nicht notwendig ist?
Weitere Möglichkeit: Dein Apache läuft chrooted und findet z.B. Perl nicht.
Weitere Möglichkeit: Du hast unabsichtlich einen Virtual Host angelegt. Für den gilt die CGI-BIN-Definition des Hauptservers nicht, sondern muß extra angelegt werden (Nebenbei: Entweder hat man exakt genau eine Domain für seinen Apache - dann kann man die Config dafür im gesamten httpd.conf verstreuen, was ich schrecklich finde. Oder man wird virtuelle Hosts einsetzen, dann läßt man das mit dem Verstreuen und sammelt alle Einstellungen in einem <VirtualHost>-Container. Auch die für CGI-BIN.)
Weitere Testmöglichkeit: Apache bringt normalerweise irgendein printenv-Script mit, was mit der Bash läuft, also kein Perl verwendet. Geht das?
- Sven Rautenberg
Hello Sven,
ichj werde mich mal durch Deine Hinweise kämpfen und versuchen, das PERL-Script überhaupt erstmal irgendwo auf dem Testserver mittels HTTP-Aufruf zum Laufen zu bringen.
http://192.168.101.99/cgi-bin/hallo_welt.cgi
Das hat schon mal nicht geklappt. Bringt die gleiche Fehlermeldung wie immer:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, root@testserver.bitworks and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
error_log:
[Thu Apr 15 15:40:05 2004] [error] (2)No such file or directory: exec of /var/www/cgi-bin/hallo_welt.cgi failed
[Thu Apr 15 15:40:05 2004] [error] [client 192.168.101.114] Premature end of script headers: /var/www/cgi-bin/hallo_welt.cgi
Was ich dabei nicht verstehe ist dieses "No such file or directory"
Was vermisst der da?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
ScriptAlias /perl/ "/home/thomas/public_html/perl/"
<Directory "/home/thomas/public_html/perl/">
AllowOverride None
Options Indexes ExecCGI
Order allow,deny
Allow from all
</Directory>
den ersten Teil habe ich nun auskommentiert (und Apache natürlich neu gestartet *gg*). Leider wird immer noch der Fehler gezeigt.
Ich habe kein mod_perl geladen. Aber ich kann auch nirgend entdecken, dass das erforderlich wäre, wenn man den externen PERL-Editor nutzen will. Oder bin ich da auf dem Holzweg?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
noch eine Idee:
Es wird ja immer das Fehlen einer Datei oder eines Verzeichnisses angemeckert. Gibt es eine PERL.ini oder sowas in der Art? Irgendwo müssen ja schließlich auch die Perl-Libs liegen und der Interpreter muss wissen wo.
Dann müsste der Fehler ja vielleicht auch von der Konsole aus auftreten, was er nicht tut, aber eben nur vielleicht.
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
Es wird ja immer das Fehlen einer Datei oder eines Verzeichnisses angemeckert. Gibt es eine PERL.ini oder sowas in der Art? Irgendwo müssen ja schließlich auch die Perl-Libs liegen und der Interpreter muss wissen wo.
Ich würde mal vorschlagen, "LogLevel Debug" zu setzen und die Error-Logdatei dann nochmal zu betrachten. Mit den wenigen Infos kann man nicht arbeiten, die da drinstehen.
http://httpd.apache.org/docs/mod/core.html.en#loglevel
- Sven Rautenberg
Hello,
Ich würde mal vorschlagen, "LogLevel Debug" zu setzen und die Error-Logdatei dann nochmal zu betrachten. Mit den wenigen Infos kann man nicht arbeiten, die da drinstehen.
Habe ich gemacht und bin auch nicht schlauer als vorher:
[Thu Apr 15 18:57:56 2004] [info] Server built: Mar 1 2003 14:24:07
[Thu Apr 15 18:57:56 2004] [notice] Accept mutex: sysvsem (Default: sysvsem)
[Thu Apr 15 18:58:19 2004] [error] (2)No such file or directory: exec of /home/thomas/public_html/perl/hallo_welt.cgi failed
[Thu Apr 15 18:58:19 2004] [error] [client 192.168.101.114] Premature end of script headers: /home/thomas/public_html/perl/h
allo_welt.cgi
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
Habe ich gemacht und bin auch nicht schlauer als vorher:
Ich auch nicht. :)
[Thu Apr 15 18:57:56 2004] [info] Server built: Mar 1 2003 14:24:07
[Thu Apr 15 18:57:56 2004] [notice] Accept mutex: sysvsem (Default: sysvsem)
[Thu Apr 15 18:58:19 2004] [error] (2)No such file or directory: exec of /home/thomas/public_html/perl/hallo_welt.cgi failed
[Thu Apr 15 18:58:19 2004] [error] [client 192.168.101.114] Premature end of script headers: /home/thomas/public_html/perl/h
allo_welt.cgi
Du sagtest, PHP würde funktionieren? Kann PHP diese CGI-Datei öffnen? Lesen? Ausführen (system()/exec())?
- Sven Rautenberg
Hello Sven,
witzige Idee.
habe also
<?php ### perltest.php ###
$_ret = array();
$err = 0;
exec('hallo_welt.cgi',$_ret,$err);
echo "<pre>";
echo "Fehlercode: $err <br />\n";
foreach($_ret as $line)
{
echo htmlentities($line)."<br />\n";
}
echo "</pre>";
?>
dieses kleine süße Script laufen lassen und zurück kam nur "Fehlercode: 127"
Leider weiß ich nicht, was der bedeutet und google liefert auch keine Codeliste.
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
witzige Idee.
habe also
<?php ### perltest.php ###
dieses kleine süße Script laufen lassen und zurück kam nur "Fehlercode: 127"
Das Skript tut nicht das, was ich geschrieben habe. Ich schrieb absichtlich:
"Öffnen? Lesen? Ausführen?". Tu das doch bitte mal alles in PHP. Bitte jeweils mit einer vorbildlichen Fehlerabfrage (also || die(...) etc).
Leider weiß ich nicht, was der bedeutet und google liefert auch keine Codeliste.
Immerhin ist das schon mal ein Indiz: PHP hat offenbar mit dem Skript ein Problem. PHP läuft unter dem User, unter dem auch der Apache läuft, inkl. aller seiner Einschränkungen. Wenn du also dein Perlskript auf der Shell aufrufen kannst, hast du offenbar irgendwelche anderen Voraussetzungen/Rechte, als dein Apache. Und mit PHP könnten wir vielleicht herausfinden, woran es genau klemmt.
- Sven Rautenberg
Moin!
Leider weiß ich nicht, was der bedeutet und google liefert auch keine Codeliste.
Dein Google ist kaputt... :)
http://www.freealter.org/doc_distrib/bash-2.04/abs-0.4/exitcodes.html#EXITCODESREF
127 bedeutet: Command not found.
Toll eigentlich. So informativ.
Allerdings deutet viel darauf hin, dass das Skript seinen Perl-Interpreter nicht findet.
Versuche doch mal bitte von PHP aus, den Perl-Interpreter zu öffnen und zu lesen - das sollte ja eigentlich möglich sein.
- Sven Rautenberg
Hello,
na endlich den saublöden Fehler gefunden!
Die shebang-Zeile war naütlich falsch und ich weiß nicht, wieso die da überhaupt so drinstand im Script. Ich hatte es schon mal ohne Pfad versucht, aber das klappte auch nicht. Müsste ich da nicht nur den Pfad zum Interpreter in die Pfadliste aufnehmen?
Jedenfalls hieß der Pfad nicht
/user/local/bin/perl
sondern
/usr/bin/perl
daher auch immer der Fehler Nr 2 (Path not found)
Und ich habe bestimmt 250 mal hingeguckt und es nicht gesehen. Erst der kleine Umweg über PHP hat es mir dann ins Auge springen lassen.
Auf jeden Fall Danke für Deine Ausdauer. Ich wollte den PC schon aus dem Fenster werfen. ist bloß nicht meiner, das hat mich zurückgehalten.
Nun kann ich ja noch etwas PERL lernen morgen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
ich wollte doch die Betreffzeile ändern.
Also: Erfolg.
Liebe Grüße aus http://www.braunschweig.de
Tom
Jedenfalls hieß der Pfad nicht
/user/local/bin/perl
sondern
/usr/bin/perl
Das was mir gleich als erstes auffiel.
[pref:t=78521&m=454131]
da ich 'ne zeitlang auf mehreren Hostern unterschiedliche Pfade hatte kenne ich diese Fehlermeldung nur zu gut. Aber du warst dir so sicher.
Struppi.