Probleme Perl zum laufen zu bringen
Sören
- perl
0 Hans Peter Horst Dirk (HPHD)0 Sören
0 Christian Kruse0 Sören0 Christian Kruse0 Beat
0 Struppi
0 Sören
Hi,
ich habe 2 Probleme:
1. Problem:
ich habe folgendendes Perl Script
#!D:/Perl/bin/perl.exe
use strict;
print "Content-type:text/html\n\n";
use XML::Parser;
my $zeiger = new XML::Parser ();
$zeiger->setHandlers (
Start => \&anfang,
End => \&ende,Char=>\&inhalt );
$zeiger->parsefile ("D:/xampp/htdocs/voc/test.xml");
print "<html><head><body>";
sub anfang
{
%watnu1=("persona"=>"<table border=1 bgclor=yellow>\n","name"=>
" <tr>\n <td>","telefon"=>"\n <td>","beruf"=>"\n <td>","adresse"=>"\nn<td>");
$wert_des_zeigers = shift;
$starttag=shift;
print $watnu1{$starttag};
print "\n";
}
sub ende
{
%watnu2=("persona"=>"</table>","name"=>
"</td>","telefon"=>"</td>","beruf"=>"</td>","adresse"=>"</td></tr>");
($wert_des_zeigers,$endtag) = @_;
print "$watnu2{$endtag}";
}
sub inhalt
{
($wert_des_zeigers,$inhalt)=@_;
print " $inhalt";
}
print "</body></html>";
Die dazugehörige XML-Datei ist soweit einwandfrei.
Wenn ich dieses Script über die Kommando-Konsole aufrufe, funktioniert alles einwandfrei. Wenn ich jedoch versuche dieses Script über meinen lokalen Server aufzurufen, wird mir gesagt, dass die XML-Datei nicht gefunden wurde.
Gefunden wird sie nur, wenn ich den absoluten Pfad zu der Datei angebe.
Mir wurde schon der Tipp gegeben, das ich "/." davor setzen soll. Dies hat leider auch nix gebracht.
2. Problem:
Ich habe bei www.all-inclusive-webspace.de einen Webserver. Auf diesen will ich Perl-Scripte laufen lassen. Wenn ich jedoch versuche ein x-beliebiges Skript zu laufen zu bringen, wird mir immer folgende Fehlermeldung angezeigt:
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.
Please contact the server administrator, [no address given] 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.
Apache Webserver Server at blackpanter.net Port 80]
Die Fehlermeldung wird mir bei allen Skripts angezeigt.
Aktiviert ist Perl auch definitiv. Ich habe mir zum nachschaun eine phpinfo() angelegt und in dieser steht
pcre
PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 7.4 2007-09-21
Daher geh ich davon aus, das ich Perl auf meinem Server nutzen kann.
Ich hab mich schon mit dem Support in Verbindung gesetzt, aber noch keine befriedigende Antwort von ihnen erhalten.
Grüße aus Japan
Sören
Mir wurde schon der Tipp gegeben, das ich "/." davor setzen soll. Dies hat leider auch nix gebracht.
Du meinst "./" oder?
Denn, "/." bring nix!
Grüße aus Japan
Japan? Nicht schlecht!
Schlechte Arbeitszeiten sage ich nur, mitten in der Nacht!
Oder du machst Urlaub, aber wenn beschäftigt sich schon mit Perl im Urlab ;) ?
ja ich mein "./" hab mich nur vertippt. sry.
Ich mach hier ein FSJ anstelle meines Zivis.
Und nach Japan will ich Informatik studieren.
你好 Sören,
$zeiger->parsefile ("D:/xampp/htdocs/voc/test.xml");
Was genau für eine Meldung kommt denn?
Aktiviert ist Perl auch definitiv. Ich habe mir zum nachschaun eine phpinfo() angelegt und in dieser steht
pcre
PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 7.4 2007-09-21Daher geh ich davon aus, das ich Perl auf meinem Server nutzen kann.
Ne, das ist ein Trugschluss. Das heisst vielleicht, dass Perl auf dem Server installiert ist, das heisst aber nicht, dass du auch wirklich CGI-Perl-Scripte benutzen kannst. Das musst du konfigurieren. Was genau gemacht werden muss, kann ich dir nicht genau sagen ohne mir dein System anzuschauen.
Aber prinzipiell gilt: schau ins Error-Log, da findest du genauere Informationen! Wenn dir die nicht weiter helfen, veröffentliche sie doch hier mal.
再见,
克里斯蒂安
Aber prinzipiell gilt: schau ins Error-Log, da findest du genauere Informationen! Wenn dir die nicht weiter helfen, veröffentliche sie doch hier mal.
Wie komme ich an die error.log? auf meinem Webserver finde ich keine solche Datei.
你好 Sören,
Aber prinzipiell gilt: schau ins Error-Log, da findest du genauere Informationen! Wenn dir die nicht weiter helfen, veröffentliche sie doch hier mal.
Wie komme ich an die error.log? auf meinem Webserver finde ich keine solche Datei.
Wo die Error-Log-Datei liegt, steht in der Konfiguration deines Webservers. Da du oben XAMPP erwähntest, geh ich mal von Apache aus. Da musst du in der Konfigurations-Datei (httpd.conf) nach der Direktive ErrorLog suchen.
再见,
克里斯蒂安
Wie komme ich an die error.log? auf meinem Webserver finde ich keine solche Datei.
Folgende Anweisung schreibt dir Perl Errors in eine Error Datei beim Script.
use warnings;
use strict;
BEGIN {
use CGI::Carp qw(carpout);
open(LOG, ">>error.txt") or die "Unable to append to error.txt: $!\n";
carpout(*LOG);
}
Damit bist du bezüglich Perl Fehler schon mal in jedem Falle im Besitze der Information.
mfg Beat
你好 Beat,
Folgende Anweisung schreibt dir Perl Errors in eine Error Datei beim Script.
Nur zur Klarstellung: nur die zur Laufzeit auftretenden Fehler. Die zur Compile-Zeit auftretenden Fehler nicht.
再见,
克里斯蒂安
Folgende Anweisung schreibt dir Perl Errors in eine Error Datei beim Script.
Nur zur Klarstellung: nur die zur Laufzeit auftretenden Fehler. Die zur Compile-Zeit auftretenden Fehler nicht.
Zu deiner eigenen Klarstellung.
Bitte erst testen, dann klarstellen.
Bitte Filerechte auf das Errorfile anständig setzen.
mfg Beat
你好 Beat,
Zu deiner eigenen Klarstellung.
Bitte erst testen, dann klarstellen.
Bitte Filerechte auf das Errorfile anständig setzen.
Zu deinem Kommentar.
Bitte sinnvolle Antworten geben. Danke.
Was ich sagen will: dass ich falsch liege, kann man mir auch fundiert mit Begründung sagen. Sind hier schliesslich zum diskutieren, und nicht zum anpflaumen. Danke.
再见,
克里斯蒂安
Hi,
ich habe 2 Probleme:
- Problem:
ich habe folgendendes Perl Script
#!D:/Perl/bin/perl.exe
Du solltest deinen Apache so konfigurieren, das hier der normale Linuxpfad stehen kann, zumindest der den du auf dem Server später verwenden willst. Unter Windows kannst di die Direktive [link:http://buecher.lingoworld.de/apache2/showdir.php?id=685&o=mod@title=ScriptInterpreterSource] nutzen, dann wird das Perl das in der Registry eingetragen ist benutzt.
Das dürfte evtl. auch die Ursache deines 2. Problem sein. das auf dem Server der Pfad nicht stimmt, hier muss üblicherweise sowas stehen:
[code lang=perl]#!/usr/bin/perl -w
> Gefunden wird sie nur, wenn ich den absoluten Pfad zu der Datei angebe.
> Mir wurde schon der Tipp gegeben, das ich "/." davor setzen soll. Dies hat leider auch nix gebracht.
Wenn dann ./ der Punkt bei der lokalen Installation ist, wo leigt das cgi-bin Verzeichnis in Wirklichkeit und wo ist die Datei?
Struppi.
Du solltest deinen Apache so konfigurieren, das hier der normale Linuxpfad stehen kann, zumindest der den du auf dem Server später verwenden willst. Unter Windows kannst di die Direktive ScriptInterpreterSource nutzen, dann wird das Perl das in der Registry eingetragen ist benutzt.
Das dürfte evtl. auch die Ursache deines 2. Problem sein. das auf dem Server der Pfad nicht stimmt, hier muss üblicherweise sowas stehen:
#!/usr/bin/perl -w
Ich hab jetzt "#!/usr/bin/perl -w" da stehn...aber ich habe da genau das gleiche Pfänomen, dass die XML-Datei nur geladen wird, wenn der Pfad absolut angegeben wird.
Für mich sieht die Fehlermeldung ein bischen danach aus, dass der Interpreter "test.pl" als Ordner interpretiert und versucht im dort zu suchen anstatt nur im verzeichnis.
Seltsamer weise wird mir genau die gleiche Fehlermeldung angezeigt, wenn ich "#!/usr/bin/perl -w" einfach lösche und die Datei aufrufe.
Wenn dann ./ der Punkt bei der lokalen Installation ist, wo leigt das cgi-bin Verzeichnis in Wirklichkeit und wo ist die Datei?
Das "/." war nur ein Verschreiber. Sry.
das cgi-bin verzeichnis liegt auf "D:/xammp/cgi-bin/" und die Datei befindet sich in "D:/xampp/htdocs/voc/test.pl"
Und wenn ich andere Perl-Scripte in "D:/xampp/htdocs/voc/" aufrufe, funktionieren die einwandfrei.
Sören-san
你好 Sören,
Ich hab jetzt "#!/usr/bin/perl -w" da stehn...aber ich habe da genau das gleiche Pfänomen, dass die XML-Datei nur geladen wird, wenn der Pfad absolut angegeben wird.
Jetzt verstehe ich dein Problem.
Du solltest Pfade eh immer komplett angeben: relative Pfade sind relativ zum WD (Working Directory). Und es ist nicht genau definiert, was das WD in einer CGI-Umgebung ist. Das heisst, beim Apache ist es vielleicht das Verzeichnis, in dem das Script liegt - bei einer anderen Server-Software mag das aber ganz anders sein. Konsequenz: keine relativen Pfade benutzen, nur absolute.
Den "Stamm-Pfad" kannst du ja in einer Konfigurations-Variablen angeben und dann die Dateien, die du brauchst, nur anhängen. So zum Beispiel:
#!/usr/bin/perl -w
use strict;
our $base_path = '/pfad/zu';
# parser erstellen
$parser->parseFile("$base_path/meine_datei.xml");
再见,
克里斯蒂安
Wenn dann ./ der Punkt bei der lokalen Installation ist, wo leigt das cgi-bin Verzeichnis in Wirklichkeit und wo ist die Datei?
Das "/." war nur ein Verschreiber. Sry.
das cgi-bin verzeichnis liegt auf "D:/xammp/cgi-bin/" und die Datei befindet sich in "D:/xampp/htdocs/voc/test.pl"
Und wenn ich andere Perl-Scripte in "D:/xampp/htdocs/voc/" aufrufe, funktionieren die einwandfrei.
und wenn du ein Skript mit deinem lokalen Server aufrufst, funktioniert es nicht mehr, oder? wie rufst du diese auf?
htpp://localhost/cgi-bin/test.pl?
Struppi.