perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 24
Click for quality!




11.02.2012 / 12:10

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDatei Zugriffs Fehler
Seitenanfang
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

BeitragErgänzung
Seitenanfang
Ich nochmal:
Die Zugriffsrechte habe ich überprüft und liegen bei 755.
Das Script selbst liegt auf einem entspechenden Server, der eigne CGI's auswerten kann.
Die dazugehörigen HTML und Textdateien liegen auf dem 1und1 Server.
Vielleicht habe ich nicht die richtige Syntax für den 1und1 Server angegeben? Der Unixpfad müsste doch heißen: 'www.domainname.de/kontakt/' - zum Beispiel... Oder?

Datum: 13.10.2005-15:01

Beitragre: Datei Zugriffs Fehler
Seitenanfang
Hi,
hier steht's doch:
# Hier den Unix-Pfad zu den Forumularen angeben.
------------^^^^^^^
$base_path = 'http://www.mueller-weidner.de/weidner/kontakt/';

Was Du angegeben hast, ist eine URL, kein Unix Pfad.

Ich bin nicht sicher, ob das überhaupt geht mit dem CGI auf einem Server und den Templates auf einem anderen...

Gruss,
svenXY

Datum: 13.10.2005-15:10

BeitragTemplates?
Seitenanfang
Wie müsste denn der korrekte UNIX-Pfad heißen, wenn die zugehörigen Dateien auf einem anderen Server liegen? (Syntax?)

Auf dem Server, wo das CGI-Script liegt, wird angeboten, ein Verzeichnis für Template Dateien anzulegen. Was für Dateien sind das genau und wie könnten diese angelegt werden? Bzw. wie müsste das Script geändert werden?

Viele Grüße
Ralf.

Datum: 13.10.2005-15:23

Beitragre: Templates?
Seitenanfang
Wenn es ein Unix pfad ist, dann kann es nur auf dem selben Server liegen.

Du solltest sie in das angebotene Verzeichnis auf dem Server legen, auf dem das CGI auch läuft. Vermutlich waren bei dem CGI einige htm oder tpl oder txt oder so Dateien, die die Templates für die Mails usw. sind.

Der Unix Pfad ist dann sowas wie /pfad/zu/meinem/verzeichnis

Wie genau der Pfad bei Dir dann heissen muss, können Dir die Hoster von dem Server sagen.

Viel Glück,
svenXY

Datum: 13.10.2005-15:42

-






-
-