rainer: Auslesen einer .data funzt nicht

Hallo, liebe Forumer....
das untenstehende Script wird ausgefuehrt, aber leider bekomme ich immer nur die Zeile "Zur Zeit leider....." als Ausgabe.
Ergo..., die news.data (liegt mit im cgi-bin Verzeichnis) wird nicht gelesen.
Nach ewiger Sucherei hier die Frage:

-Seht ihr evtl. den Fehler - oder Denkfehler?

Schoenen Dank fuer Eure Muehe

rainer

#!/usr/bin/perl

holt Datensaetze aus der Datei news.data und stellt sie als HTML Datei dar

$database= join "",$ENV{'DOCUMENT_ROOT'},"news.data";

$html_zeile[0]="<HR><FONT FACE="Verdana,Arial,Helvetica">";
$html_zeile[1]="<FONT SIZE=+2><B>Zur Zeit gibt es leider keine News</B></FONT><HR>";

if (open DATA, $database){
$index=0;

while ($zeile = <DATA>){  

($ueberschrift,$text)=split /~/,$zeile;
  %hasch= (
   ueberschrift  => $ueberschrift,
   text  => $text,
   datum  => $datum,
  );
  chomp %hasch;
# erste zeile ueberlesen, da da nur die ueberschrift steht!
  if ($index > 0){
   $html_zeile[$index]= join "","\n<B><CENTER>",$hasch{ueberschrift},"</CENTER></B><P>\n<FONT SIZE=-1><DIV ALIGN=JUSTIFY>",$hasch{text},"\n</DIV>\n<P>\n <I>",$hasch{datum},"\n</I>\n</FONT><HR>";;
  }
  $index++;
}
close DATA;
}

print "Content-type: text/html \n\n";
print @html_zeile;

exit(0);

  1. Hi Rainer!

    $database= join "",$ENV{'DOCUMENT_ROOT'},"news.data";

    Offensichtlich schlägt das Öffnen der Datei fehl, printe doch mal $database. Was steht denn da drin? Geht $ENV{'DOCUMENT_ROOT'}?
    Es ist besser, Dateien so zu öffnen:
    open (DATA,$database) die "Can't Open $database!\n";
    Dann wird das Script an beim Fehlschlagen der Operation beendet und Du erhälts 'ne Fehlerausschrift. So wie Du es gemacht hast, durchläuft das Script im Fehlerfall (Datei öffnen) nicht die if... then schleife, sondern gibt gleich die Meldung "keinen News..." aus. Auch wenn die Datei news.data nicht existiert.

    Gruß Frank
    P.S. So bekommst Du raus, welche $ENV-Vars vorhanden sind:

    #!/usr/bin/perl
    print "Content-type: text/plain\n\n";
    $nl=0;
    for(%ENV)
    {
    print  $_, "  ";
    $nl++;
    $x = $nl % 2;
    if ($x == 0){ print "\n";}else{ print " : ";}
    }
    exit;

    1. Hi Frank!

      #!/usr/bin/perl
      print "Content-type: text/plain\n\n";
      $nl=0;
      for(%ENV)
      {
      print  $_, "  ";
      $nl++;
      $x = $nl % 2;
      if ($x == 0){ print "\n";}else{ print " : ";}
      }
      exit;

      Ahem... das ist nicht Dein Ernst, oder?

      #!/usr/bin/perl
      print "Content-type: text/plain\n\n";
      print "$_:\t\t$ENV{$_}\n" for (sort keys %ENV);

      Fuer Perl kleiner 5.005 die letzte Zeile:
      for (sort keys %ENV) { print "$_:\t\t$ENV{$_}\n" }

      Oder:
      print("$key:\t\t$value\n") while (($key, $value) = each(%ENV));

      So long

      1. Hi Calocybe!

        Ahem... das ist nicht Dein Ernst, oder?

        <rechtfertigung>
        Naja, das Script ist noch aus der Zeit der ersten Gehversuche in Perl.
        </rechtfertigung>
        Heute würde es anders aussehen, ewig nicht gebraucht und nun einfach cut&paste... Zur schnellen Hilfe taugts allemal, oder?

        Gruß Frank

        1. Hi!

          <rechtfertigung>
          Naja, das Script ist noch aus der Zeit der ersten Gehversuche in Perl.
          </rechtfertigung>

          He he, *mein* erster Gehversuch sah im uebrigen fast genauso aus... ;-)  (Das mit $counter%2==0 hatte ich jedenfalls auch benutzt.)
          Allerdings habe ich es dann mit der Zeit doch etwas optimiert, verwende dieses Scriptchen naemlich immer zum Testen, ob der Webserver ordentlich fuer CGI konfiguriert ist.

          So long

  2. hi

    schau auch mal, ob der ordner und das file von allen gelesen werden können ;)
    sollte selbstverständlich sein, vergisst man aber schnell mal.
    im zweifelsfall alles '777' aber dann nicht vergessen das wieder rückgängig zu machen wenns läuft ;)

    Spark

  3. Hi!

    $database= join "",$ENV{'DOCUMENT_ROOT'},"news.data";

    Sieht irgendwie umständlich aus... Warum nicht einfach:
    $database = $ENV{'DOCUMENT_ROOT'}."news.data";
    oder
    $database = "$ENV{'DOCUMENT_ROOT'}news.data";

    Und dann wie die anderen bereits vorgeschlagen haben den Pfad bzw. chmod überprüfen.

    CU
    ArneB

  4. Hallo und Danke,
    sowas aehnliches hatte ich mir schon gedacht von wegen zu umstaendlich.

    Rainer