Shadow: Skript funktioniert Lokal, jedoch nicht extern???

Ich habe mal wieder ein problem, ich habe eine Skript geschrieben der Lokal auf meinem Rechner wunderbar funktioniert, jedoch, wenn ich in auf den Server von meinem Webspacehoster lege, dann nicht mehr!
Woran kann es liegen?

Hier mal der Quellcode:

#!/usr/bin/perl

#Daten für den Skript

$urlskript = "http://www.seb.esser.space4free.de/cgi-bin/event.test.pl";
$urlhost = "http://www.space4free.de";
$dblockip = '/srv/www/htdocs/web80/html/cgi-bin/lockip.db';
$dblockweb = '/srv/www/htdocs/web80/html/cgi-bin/lockweb.db';
$locktime = 21600; #Sekunden => 6 Stunden

use CGI ("param");
use DB_File;

$webaccount = param("webaccount");
$step = param("step");
$step = $step+1;
$url = "$urlskript"."?webaccount="."$webaccount"."&step="."$step";
$account = "web"."$webaccount";

#Überprüfen, ob die IP noch gesperrt ist

%lockip;
tie(%lockip,'DB_File',$dblockip,O_RDWR|O_CREAT, 0777) or die "Can't tie %lockip with file $dblockip";

$cip = $ENV{'REMOTE_ADDR'};
$ctime = time;
$timediff = $ctime - $lockip{$cip};

if ($timediff > $locktime)
 {
  untie %lockip;
 }
else
 {
  print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<body>\n";
  print "Leider kannst du nicht einen weiteren Klick speichern, da deine IP-Adresse vor weniger<br>\n";
  print "als 6 Stunden schon einmal einen Klick gespeichert hat\n";
  print "</body>\n";
  print "</html>\n";

untie %lockip;
  exit;
 }

#Überprüfen, ob der User noch gesperrt ist

%lockweb;
tie(%lockweb,'DB_File',$dblockweb,O_RDWR|O_CREAT, 0777) or die "Can't tie %lockweb with file $dblockweb";

$ctime = time;
$timediff = $ctime - $lockweb{$account};

if ($timediff > $locktime)
 {
  untie %lockweb;
 }
else
 {
  print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<body>\n";
  print "Leider kannst du nicht einen weiteren Klick speichern, da dein Account vor weniger<br>\n";
  print "als 6 Stunden schon einmal einen Klick gespeichert hat\n";
  print "</body>\n";
  print "</html>\n";

untie %lockweb;
  exit;
 }

#Abarbeiten der verschiedenen Steps

if ($step == 1)
 {
  print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<head>\n";
  print "<script type="text/JavaScript">\n";
  print "function popup() {\n";
  print "F1 = ";
  print "window.open("$url","PopUp","menubar=no,toolbar=yes";
  print ",scrollbars=yes,status=yes,resizable=yes,location=no,hotkeys=yes,");";
  print "}\n";
  print "\n</script>\n";
  print "</head>\n";
  print "<body onload="popup()">\n";
  print "Es sollte sich nun ein PopUP öffnen, indem der Event vortgesetzt wird\n";
  print "</body>\n";
  print "</html>\n";
 }

if ($step == 2)
 {
  open(IN,"account/"."$account");
    $statistik = <IN>;
  close(IN);

print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<body>\n";
  print "Du hast bereits $statistik Klicks gemacht\n";
  print "<br>\n";
  print "<form action="$urlskript" method="post">\n";
  print "<input type="hidden" name="webaccount" value="$webaccount">\n";
  print "<input type="hidden" name="step" value="$step">\n";
  print "<input type="submit" value="Zum starten">\n";
  print "</form>\n";
  print "</body>\n";
  print "</html>\n";
 }

if ($step == 3)
 {
  print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<body onunload="pop()">\n";
  print "<script type="text/javascript">\n";
  print "<!--\n";
  print "function pop() {\n";
  print "F2 = window.open";
  print "("$url","PopUp2","menubar=no,toolbar=yes,scrollbars=yes,stat";
  print "us=yes,resizable=yes,location=no,hotkeys=yes,");}\n";
  print "//-->\n";
  print "</script>\n";

print "<script type="text/javascript"><!--\n";
  print "google_ad_client = "pub-5708059318680561";\n";
  print "google_ad_width = 125;\n";
  print "google_ad_height = 125;\n";
  print "google_ad_format = "125x125_as";\n";
  print "google_ad_channel ="2610363739";\n";
  print "google_color_border = "365275";\n";
  print "google_color_bg = "365275";\n";

print "google_color_link = "FFFFFF";\n";
  print "google_color_url = "FF8800";\n";
  print "google_color_text = "CCCCCC";\n";
  print "//--></script>\n";

print "<script "."type="text/javascript" ";
  print "src="http://pagead2.googlesyndication.com/pagead/show_ads.js">\n";
  print "</script>\n";

print "</body>\n";
  print "</html>\n";
 }

if ($step == 4)
 {
  print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<body>\n";
  print "<script type="text/javascript">\n";
  print "<!--\n";
  print "function weiter() {\n";
  print "opener.location.href='$url';\n";
  print "self.close();\n";
  print "}\n";
  print "//-->\n";
  print "</script>\n";
  print "<form>\n";
  print "<input type="button" value=" Klicken " onclick="weiter()">\n";
  print "</form>\n";
  print "</body>\n";
  print "</html>\n";
 }

if ($step == 5)
 {
  print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<head>\n";
  print "  <meta http-equiv="refresh" content="0 URL=$url">\n";
  print "</head>\n";
  print "<body>\n";
  print "</body>\n";
  print "</html>\n";
 }

if ($step == 6)
 {
  open(IN,"account/"."$account");
    $oldnummber = <IN>;
  close(IN);

$newnummber = $oldnummber+1;

open(OUT,">account/"."$account");
    print OUT "$newnummber";
  close(OUT);

%lockip;
  tie(%lockip,'DB_File',$dblockip,O_RDWR|O_CREAT, 0777) or die "Can't tie %lockip with file $dblockip";

$cip = $ENV{'REMOTE_ADDR'};
  $ctime = time;

$lockip{$cip} = $ctime;

untie %lockip;

%lockweb;
  tie(%lockweb,'DB_File',$dblockweb,O_RDWR|O_CREAT, 0777) or die "Can't tie %lockweb with file $dblockweb";

$ctime = time;

$lockweb{$account} = $ctime;

untie %lockweb;

print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<head>\n";
  print "  <title> Google Banner Event von Space4free.de </title>\n";
  print "</head>\n";
  print "<body>\n";
  print "<h1>Dein Klick wurde gespeichert</h1>\n";
  print "Um zum Anfang zurück zu kehren bitte";
  print "<a href="$url"> hier klicken</a>";
  print "</body>\n";
  print "</html>\n";
 }

if ($step == 7)
 {
  print "Content-type: text/html\n\n";
  print "<html>\n";
  print "<head>\n";
  print "<script type="text/javascript">\n";
  print "function klick() {\n";
  print "opener.location.href='$urlhost';\n";
  print "self.close();\n";
  print "}\n";
  print "</script>\n";
  print "</head>\n";
  print "<body onload="klick()">\n";
  print "</body>\n";
  print "</html>\n";
 }

  1. Hi,

    Ich habe mal wieder ein problem, ich habe eine Skript geschrieben der Lokal auf meinem Rechner wunderbar funktioniert, jedoch, wenn ich in auf den Server von meinem Webspacehoster lege, dann nicht mehr!
    Woran kann es liegen?

    Welche Fehlermeldung erhältst Du denn?

    Hier mal der Quellcode:
    #!/usr/bin/perl

    Das hier ist eine beliebte Fehlerquelle.
    Stimmt der Pfad?

    Bitte statt kiloweise Quellcode lieber relevante Informationen wie z.B. die Fehlermeldung angeben.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Fehlermeldung:

      Serverfehler!
      Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

      Fehlermeldung:
      Premature end of script headers: event.test.pl

      Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.

      Error 500

      Pfad stimmt

      1. Hi,

        Premature end of script headers: event.test.pl

        Also eine Ausgabe vor dem content-type header.

        Was sagt das error.log?

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Da komm ich leider nicht ran, da es ein free Webspace ist, ich habe gerade gemerkt, das die anderen Perl-Skripte, die vorher auf dem server gelaufen sind, auch nicht laufen, kann es sein, das es am Interpreten liegt???

  2. Ich habe mal wieder ein problem, ich habe eine Skript geschrieben der Lokal auf meinem Rechner wunderbar funktioniert, jedoch, wenn ich in auf den Server von meinem Webspacehoster lege, dann nicht mehr!
    Woran kann es liegen?

    Du solltest schrittweise vorgehen.

    a.) ein skript was läuft erstellen
    b.) nach und nach alle Module einbinden.  nicht alle Provider (gerade kostenlose) stellen alle Module zu Verfügung.

    Hier mal der Quellcode:

    Der keinerlei Möglickeiten der Fehleranalyse bietet.
    Es fängt an, hier:

    #!/usr/bin/perl

    Keine Warnungen
    Stimmt der Pfad zum Perl.

    #Daten für den Skript

    Wo ist use strict?

    $urlskript = "http://www.seb.esser.space4free.de/cgi-bin/event.test.pl";
    $urlhost = "http://www.space4free.de";
    $dblockip = '/srv/www/htdocs/web80/html/cgi-bin/lockip.db';
    $dblockweb = '/srv/www/htdocs/web80/html/cgi-bin/lockweb.db';
    $locktime = 21600; #Sekunden => 6 Stunden

    my $urlskript = "http://www.seb.esser.space4free.de/cgi-bin/event.test.pl";
    my $urlhost = "http://www.space4free.de";
    my $dblockip = '/srv/www/htdocs/web80/html/cgi-bin/lockip.db';
    my $dblockweb = '/srv/www/htdocs/web80/html/cgi-bin/lockweb.db';
    my $locktime = 21600; #Sekunden => 6 Stunden

    use CGI ("param");

    Das ist eine absolute Verschwendung eines 200KB grossen Modules. Les dir mal durch was CGI.pm alles kann.

    use DB_File;

    das kann schon ein Knackpunkt sein, das muss nicht vorhanden sein, obwohl es bei jeder Perl Version dabei sein sollte.

    use CGI::Carp qw/fatalsToBrowser/;

    ist für die Entwicklung von CGI Perl Skripten (vor allem wenn man keinen Zugriff auf die Logfiles hat) notwendig.

    $webaccount = param("webaccount");
    $step = param("step");
    $step = $step+1;

    Das kann schon zu einem Fehler führen, wenn $step keine Zahl ist.
    Ansonsten: $step++;

    $url = "$urlskript"."?webaccount="."$webaccount"."&step="."$step";

    my $url = "$urlskript?webaccount=$webaccount&amp;step=$step";

    $account = "web"."$webaccount";

    my $account = "web$webaccount";

    #Überprüfen, ob die IP noch gesperrt ist

    %lockip;
    tie(%lockip,'DB_File',$dblockip,O_RDWR|O_CREAT, 0777) or die "Can't tie %lockip with file $dblockip";

    $cip = $ENV{'REMOTE_ADDR'};
    $ctime = time;
    $timediff = $ctime - $lockip{$cip};

    Weder $ENV{'REMOTE_ADDR'} noch $lockip{$cip} sind notwendigerweise definiert.
    Du solltest bzw. du musst gerade bei CGI Programmen jeden wert prüfen, ob er das enthält was er enthalten darf.

    if ($timediff > $locktime)
    {
      untie %lockip;
    }
    else
    {
      print "Content-type: text/html\n\n";
      print "<html>\n";
      print "<body>\n";
      print "Leider kannst du nicht einen weiteren Klick speichern, da deine IP-Adresse vor weniger<br>\n";
      print "als 6 Stunden schon einmal einen Klick gespeichert hat\n";
      print "</body>\n";
      print "</html>\n";

    Wie schon gesagt CGI.pm bietet vielfältige Möglichkeiten.
    Gerade um das Mischen von HTML Code und Perl Code zu vermeiden und was die Lesbarkeit des Codes aber auch die Fehleranfälligkeit des HTML Codes vermeidet.

    print CGI::header(),
    CGI::start_html(),
    "Leider kannst du nicht einen weiteren Klick speichern, da deine IP-Adresse vor weniger<br>\n",
    als 6 Stunden schon einmal einen Klick gespeichert hat\n",
    CGI::end_html()

    Auch ansonsten ist dein Code nicht sonderlich pflegeleicht und lesbar, du solltest die einzelnen Schritte in Funktionen packen und immer wiederkehrende Aufgaben ebenfalls.

    Struppi.

    1. wofür brauche ich "use strict"???
      funktioniert auch ohne

      1. wofür brauche ich "use strict"???
        funktioniert auch ohne

        um Fehler zu vermeiden und zu finden.
        wenn es dir Spaß macht Stunden Tippfehler zu suchen, bitte.  Aber dann wunder dich nicht das ein Programm nicht läuft.

        Struppi.

        1. hi,

          @Struppi Deine Ausführungen sind spitze!

          wofür brauche ich "use strict"???
          funktioniert auch ohne

          um Fehler zu vermeiden und zu finden.
          wenn es dir Spaß macht Stunden Tippfehler zu suchen, bitte.  Aber dann wunder dich nicht das ein Programm nicht läuft.

          Da hab ich eine kl. Ergänzung.

          Und mal aufgeschrieben, siehe
          http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?display=11&id=3

          Ansonsten Grüße nach Mainz, Grüße an Alle usw.

          Rolf

          --
          KnowHow veröffentlichen statt patentieren!