Hallo!
Ich hoffe, ihr könnt mir weiterhelfen:
Also:
Ich habe einen Webspace bei 1und1. Der macht mir in meinem Paket jedoch keine eigenen CGI's.
Also hab ich mir einen freien Server gesucht und bin bei Bemaknet fündig geworden.
Leider funktioniert das Script nicht richtig!
Ich bekomme immer die Fehlermeldung:Datei Zugriffs Fehler
Ein Fehler tritt beim Zugriff auf: Error Template (http://www.mueller-weidner.de/weidner/kontakt/error.txt): No such file or directory.
Woran könnte das liegen?
Hier das Script:
#!/usr/bin/perl -w
# AlienForm2 - Released 23 May, 1998.
# Copyright 1997, 1998 Jon Hedley - jon@cgi.tj
# All Rights Reserved.
# Do not discribute this script without my express, written permission!
# Remember to upload in ASCII mode!
# Work hard, and be good to your mother.
########################################################################
# Deutsche Übersetzung:
# www.internet-partner.de mail: knud@schiffmann.com
# Beachte, daß das Script im ASCII Modus upgeloadet wird !
# Installationhilfen können gegeben werden, bitte Kontakt per eMail oder AIM
# Wir freuen uns auf jeden Link auf unsere Homepage, machen es aber nicht zur
# Bedingung
# Setzt den benötigten MIME-Type. Normalerweise sollte hier nichts geändert werden.
$content_type = "Content-Type: text/html\n\n";
# Hier den Unix-Pfad zu den Forumularen angeben. Dieser Pfad wird den angegebenen
# Formularen vorangestellt. Das Verzeichnis sollte dort sein, wo sich auch die HTML-Dateien
# befinden, nicht aber im CGI-BIN Verzeichnis, bzw. in dortigen Unterverzeichnissen!
$base_path = 'http://www.mueller-weidner.de/weidner/kontakt/';
# Befehl zum laden des Mailers, welcher unbedingt den STDIN-Standard unterstützen sollte!
$mail_cmd = '/usr/lib/sendmail -t';
# Hier kann festgeelgt werden, welcher Server, oder welche Seiten auf dieses
# Script zugreifen darf. Dabei können ganze URL's angegeben werden oder auch
# global ganze Server (ist meist das sinnvollste). Es ist sinnvoll die Angaben
# mit UND ohne vorangestelltem www zu machen. Es sei denn, der Server ist sowieso
# nicht erreichbar ohne www. vorweg.
# Alternativ kann hier auch eine IP angegeben werden. Alle Einträge sind in ' Hochkommas '
# zu setzen, und werden in einer Liste mit Kommas getrennt.
@Referers = ('mueller-weidner.de','www.mueller-weidner.de','www.r-weidner.de','r-weidner.de','www.sachsenanhalt-regional.de');
## AB HIER NICHTS MEHR ÄNDERN, WENN DU NICHT GENAU WEISST ##
## WAS DU MACHST! ##
print "Content-type: text/html\n\n";
$error_loop = 0;
$browser_out = 0;
if ($ENV{'REQUEST_METHOD'} eq 'GET' and not $ENV{'QUERY_STRING'})
{
$ENV{'OUT_TITLE'} = "AlienForm2 deutsch Releas 9/98";
$ENV{'OUT_MSG'} = qq|Die letzte deutsche Version ist erhaeltlich bei <a href="http://www.internet-partner.de">Internet-Partner.de.|;
@msg = (<DATA>);
@msg = ParseText(@msg);
BrowserOut(@msg);
exit(0);
}
&CheckRef;
&ParseForm;
if (@missing_values or @bad_emails or @only_digits or @only_words) { Error('evil values') }
foreach $key (keys %FORM)
{
if ($key =~ /^_send_email/)
{
@lines = ReadFile('Email Template',$FORM{$key});
@lines = ParseText(@lines);
SendMail(@lines);
}
elsif ($key =~ /^_out_file/)
{
@lines = ReadFile('Log File',$FORM{$key});
@lines = ParseText(@lines);
LogFile('LogFile Template',@lines);
}
elsif ($key =~ /^_browser_out/ and $browser_out < 2)
{
$browser_out++;
@lines = ReadFile('Browser Template',$FORM{$key});
@lines = ParseText(@lines);
BrowserOut(@lines);
}
elsif ($key =~ /^_redirect/ and $browser_out < 2)
{
$browser_out++;
print "<font color=\"#999999\">Location: $FORM{$key}\n\n";
}
}
unless ($browser_out)
{
@msg = (<DATA>);
$ENV{'OUT_TITLE'} = "Übertragung erfolgreich";
$ENV{'OUT_MSG'} = "Deine eingaben waren erfolgreich, vielen Dank";
@msg = ParseText(@msg);
BrowserOut(@msg);
}
exit(0);
sub BrowserOut
{ print "<font color=\"#999999\">$content_type@_\n" }
sub CheckRef
{
my ($valid_referer, @terms);
if ((@Referers) and ($ENV{'HTTP_REFERER'}))
{
foreach $referer (@Referers)
{
if ($ENV{'HTTP_REFERER'} =~ m|http.*?://$referer|i)
{
$valid_referer++;
last;
}
}
}
else {$valid_referer++;}
unless ($valid_referer)
{
@terms = split(/\//,$ENV{'HTTP_REFERER'});
Error
(
'Falscher Server',
"'$ENV{'HTTP_REFERER'}' ist nicht autorisiert zur Verwendung des Scripts. Wenn du eine Erlaubnis geben möchtest,
trage bitte '$terms[2]' in die reffer-liste am Anfang des Scripts."
);
}
}
sub Error
{
++$error_loop;
my $title = shift @_;
my $msg = shift @_;
my @error;
if ($title eq 'evil values')
{
my $val;
if (@missing_values)
{
$msg = qq|<p>Die nachfolgenden Felder müssen eingegeben werden:</p>\n<ol type="i">\n|;
foreach $val (@missing_values) { $msg .= "<font color=\"#999999\"><li>$val\n" }
$msg .= "</ol>\n";
}
if (@bad_emails)
{
$msg .= qq|<p>Die nachfolgenden Felder müssen eine gültige eMail-Adresse beinhalten:</p>\n<ol type="i">\n|;
foreach $val (@bad_emails) { $msg .= "<font color=\"#999999\"><li>$val\n" }
$msg .= "</ol>\n";
}
if (@only_digits)
{
$msg .= qq|<p>Die nachfolgenden Felder dürfen nur Zahlen von (0-9) enthalten:</p>\n<ol type="i">\n|;
foreach $val (@only_digits) { $msg .= "<font color=\"#999999\"><li>$val\n" }
$msg .= "</ol>\n";
}
if (@only_words)
{
$msg .= qq|<p>Die nachfolgenden Felder dürfen keine Sonderzeichen enthalten, nur A-Z und 0-9:</p>\n<ol type="i">\n|;
foreach $val (@only_words) { $msg .= "<font color=\"#999999\"><li>$val\n" }
$msg .= "<font color=\"#999999\"></ol>\n";
}
$title = 'Fehler - Fehlerhafte Zahlen';
$msg .= qq|<p>Gehe zurück und wiederhole die Eingabe.</p>\n|;
}
if ($FORM{'_error_url'}) { print "<font color=\"#999999\">Location: $FORM{'_error_url'}\n\n" }
elsif ($FORM{'_error_path'} and $error_loop < 2)
{
$ENV{'OUT_TITLE'} = $title;
$ENV{'OUT_MSG'} = $msg;
@error = ReadFile('Error Template',$FORM{'_error_path'});
@error = ParseText(@error);
BrowserOut(@error);
}
else
{
@error = (<DATA>);
$ENV{'OUT_TITLE'} = $title;
$ENV{'OUT_MSG'} = $msg;
@error = ParseText(@error);
BrowserOut(@error);
}
exit(0);
}
sub LogFile
{
my $msg = shift @_;
my $file = shift @_;
$file = $base_path . $file;
open(FILE,">>$file") or Error('Datei Zugriffs Fehler',"Ein Fehler tritt auf, beim anhängen an die Log-Datei $msg ($file): $!");
flock(FILE,2) or Error('Datei Sperr Fehler',"Ein Fehler tritt bei der Dateispere auf: $msg ($file): $!.");
print FILE @_;
close(FILE) or Error('Datei schlißen Fehler',"Ein Fehler tritt beim Schliessen der Datei auf: $msg ($file): $!.");
}
sub ReadFile
{
my $msg = shift @_;
my $file = shift @_;
my @lines;
$file = $base_path . $file;
open(FILE, "$file") or Error('Datei Zugriffs Fehler',"Ein Fehler tritt beim Zugriff auf: $msg ($file): $!.");
flock(FILE,2) or Error('Datei Lock Fehler',"Ein Fehler tritt beim sperren auf: $msg ($file): $!.");
@lines = (<FILE>);
close(FILE) or Error('Datei Schliessen Fehler',"Ein Fehler tritt beim Schliessen der Datei auf: $msg ($file): $!.");
return @lines;
}
sub ParseForm
{
my ($key, $prefs, $buffer);
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{ @pairs = split(/&/, $ENV{'QUERY_STRING'}) }
elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer)
}
else {Error('Bad or Unbekannte Request-Methode',
"Das Formular muß mit REQUEST=POST oder REQUEST=GET übertragen werden, Fehler in HTML-Datei prüfen!.")}
foreach $pair (@pairs)
{
local($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.)*?-->//mg;
$FORM{$name} = $value;
if ($name =~ /_/ and $name !~ /^_/)
{
($prefs, $key) = split /_/, $name, 2;
if ($prefs =~ /r/i and not $value) { push @missing_values, $key }
if ($prefs =~ /e/i and $value and
(($value =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/) or
($value !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/)))
{ push @bad_emails, $key }
if ($prefs =~ /d/i and $value and $value =~ /\D/) { push @only_digits, $key }
if ($prefs =~ /w/i and $value and $value =~ /\W/) { push @only_words, $key }
if ($prefs =~ /s/i and $value) { $value =~ s/^(\s)*//;
$value =~ s/(\s)*$//;
$FORM{$name} = $value; }
}
}
}
sub ParseText
{
my ($line, $key, $value, $sub);
foreach $line (@_)
{
while (($key => $value) = each %FORM)
{ $line =~ s/\[$key\]/$value/ig }
while (($key => $value) = each %ENV)
{ $line =~ s/\[\%$key\]/$value/ig }
$line =~ s/\[[^<](.)*?[^>]\]//g;
}
foreach $line (@_)
{
while ($line =~ /\[<((.)*?)>\]/)
{
$sub = $1;
$sub =~ s/[^\d\+\*\/\-%\.x<>\(\)]//g;
$sub = eval $sub;
$line =~ s/\[<(.)*?>\]/$sub/
}
}
return @_;
}
sub SendMail
{
open(MAIL,"|$mail_cmd") or Error('Fehler - Mailer öffnen',"Ein Fehler tritt auf beim Starten des Mailers ($mail_cmd): $!.");
print MAIL @_;
close(MAIL) or Error('Mail Send Error',"Ein Fehler tritt beim Senden der eMail auf: $?. Please check the email's headers.");
}
__END__
<html>
<head>
<title>[%OUT_TITLE]</title>
</head>
<body bgcolor="#333333" text="#999999" link="#cccccc" vlink="#cccccc" alink="#cccccc">
<div align="center"><center>
<table border="2" cellpadding="0" cellspacing="0" bgcolor="#FFD26B" bordercolor="#699A69"
width="500">
<tr>
<td><h2 align="center">[%OUT_TITLE]</h2>
<p align="center">[%OUT_MSG]</p></td>
</tr>
</table>
<p><br><p>
<table border="2" cellpadding="0" cellspacing="0" bgcolor="#FFD26B" bordercolor="#699A69"
width="500">
<tr>
<td><h2 align="center"><a href="http://www.cgi.tj/">AlienForm<sup>2</sup></a></h2>
<p align="center">Copyright 1997 - 1998 <a href="mailto:jon@cgi.tj">Jon Hedley</a>.<br>
All Rights Reserved.<br><br>Deutsche Übersetzung: <a href=http://www.internet-partner.de>www.internet-partner.de</a><br>
eMail <a href=mailto:hotline@schiffmann.com>hotline@schiffmann.com</a></b><br></td>
</tr>
</table>
</center></div>
</body>
</html>
Datum: 13.10.2005-14:44
