Sören: Probleme Perl zum laufen zu bringen

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

  1. 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 ;) ?

    1. ja ich mein "./" hab mich nur vertippt. sry.

      Ich mach hier ein FSJ anstelle meines Zivis.
      Und nach Japan will ich Informatik studieren.

  2. 你好 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-21

    Daher 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.

    再见,
     克里斯蒂安

    --
    http://wwwtech.de/
    WWWTech.de | Wayne Revived
    Q: God, root, what's the difference?
    A: God is merciful.
    1. 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.

      1. 你好 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.

        再见,
         克里斯蒂安

        --
        http://wwwtech.de/
        WWWTech.de | Wayne Revived
        Ganz gleich, welchen Weg ich wähle, ich kehre heim.
      2. 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

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        1. 你好 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.

          再见,
           克里斯蒂安

          --
          http://wwwtech.de/
          WWWTech.de | Wayne Revived
          Willst du die Freuden dieser Welt geniessen, so musst du auch ihr Leid erdulden.
          1. 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

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            1. 你好 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.

              再见,
               克里斯蒂安

              --
              http://wwwtech.de/
              WWWTech.de | Wayne Revived
              Fatal! Ich kann kein Reserve-Offizier mehr sein!
  3. Hi,

    ich habe 2 Probleme:

    1. 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.
    
    1. 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

      1. 你好 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");  
        
        

        再见,
         克里斯蒂安

        --
        http://wwwtech.de/
        WWWTech.de | Wayne Revived
        Mit einem Windhauch kannst du das Feuer loeschen. Mit einem Windhauch kannst du das Feuer entfachen.
      2. 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.