Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

[CGI] Zeile an Datei anhängen

  Alt 14. Jan 2004, 05:28
Hallo. Ich habe mir das mit meiner HP ja schon realtiv einfach gemacht. Ich lasse die Seiten eigentlich weitgehen vom Apache Server selber generieren. Besonders deutlich wird das wohl hier: www.luckie-online.de/downloads . Die Tabelle wird automatisch vom Server generiert. Man kann sie mittels einer .htaccess-datei noch etwas formatiren. Für den Ordner sähe das ungefähr so aus:
Code:
FancyIndexing on

IndexOptions NameWidth=25 DescriptionWidth=500 IconHeight=15 IconWidth=15 SuppressHTMLPreamble FoldersFirst
IndexIgnore license.txt *.exe
HeaderName /includes/headdownloads.shtml
ReadmeName /includes/foot.html

AddIcon /pics/folder.png screenshots

AddDescription "Screenshots der Programme" screenshots
AddDescription "Spielt MP, OGG und CDA Formate ab. Mit Playliste. [unfertig]" AudioPlayer*.zip
So, um das ganze jetzt noch etwas bequemer für mich zu machen und um eventuell von wo anders Dateien von mir hochladen zu können, habe ich mir ein CGI-Script geschrieben, welches für mich einen Web-Upload macht. Geht auch schon ganz gut, die Datei landet da wo sie hin soll:
Code:
#!/usr/bin/perl -w

use strict;
use CGI; # Modul fuer CGI-Programme

my $cgi = new CGI; # neues Objekt erstellen

# die datei-daten holen
my $file = $cgi->param("myfile");
my $dir = $cgi->param("dir");
my $comment = $cgi->param("comment");

# Content-type fuer die Ausgabe
# print $cgi->header(-type => 'text/html');

# dateinamen erstellen und die datei auf dem server speichern
my $fullpath = $cgi->param("myfile");
my $index = rindex($fullpath, "\\");
my $filename = substr($fullpath, ($index + 1));
my $fname = lc('../'.$dir.'/'.$filename);
open DAT,'>'.$fname or die 'Error processing file: ',$!;

# Dateien in den Binaer-Modus schalten
binmode $file;
binmode DAT;

my $data;
while(read $file,$data,1024) {
  print DAT $data;
}
close DAT;

my $databasefile = '.htaccess';
my $newline = 'AddDescription "'.$comment.'" '.$filename;
open(FILE, "'../'.$dir.'/'.$databasefile") || die Can't locate database file $!;
print FILE "\n$newline";
close(FILE);

print "Content-Type: text/html\n\n";
print "<head><title>Homepage von Michael Puff - Datei-Uploadbestätigung</title></head>";
print "<html><body>";
print "<h1>Datei-Uploadbestätigung</h1>";
print "<hr>";
print "Datei [b]".$filename."[/b] erfolgreich nach [b]http://www.luckie-online.de/".$dir."/[/b] hochgeladen.

";
print "<a href=\"http://www.luckie-online.de/sitemanager\">Zurück</a>";
print "</body></html>";
Das einzige woran es hapert ist das Hinzufügen der Beschreibung in der .htaccess-Datei. Und das darf natürlich nur geschehen, wenn es sie auch wirklich gibt, nicht in allen Verzeichnissen habe ich eine. Der Upload geht, wie gesagt, nur danach bekomme ich einen Fehler 500 vom Server. Syntaktisch ist das Script OK, das habe ich schon geprüft. Ich nehme mal stark an, es liegt am Pfad zur .htaccess-Datei. Nur leider weiß ich nicht, wie ich das debuggen kann.

Ich habe es auch schon so probiert:
Code:
my $databasefile = '../'.$dir.'/.htaccess';
my $newline = 'AddDescription "'.$comment.'" '.$filename;
#open(FILE, "$databasefile") || die Can't locate database file $!;
#print FILE "\n$newline";
#close(FILE);

print $databasefile;
print "Content-Type: text/html\n\n";
print "<head><title>Homepage von Michael Puff - Datei-Uploadbestätigung</title></head>";
...;
Aber ich bekomme den Wert von $databasefile gar nicht zu sehen, da vorher schon der Fehler 500 vom Server kommt.

Wer kann mir helfen, das Problem zu lösen. Ich muss dazu sagen, dass ich nicht sehr viel von CGI/Perl verstehen, das habe ich mir so alles zusammengeklaut. Es wäre also ganz nett, wen mir da jemand die entsprechenden Zeilen korrigieren könnte, ich habe nämnlich nicht vor wegen diesem einem Script die ganze Sprache zu lernen. Danke schon mal im voraus.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat