Thema System Mittwoch, 2.5.2007, 10:15:42 Uhr
Vordefinierte Variablen in Perl Ich habe ja bereits hier schon mal über vordefiniete Variablen in Perl geschrieben. Es gibt jedoch noch mehr, die ich dann nun hier nochmal beschreiben will. Ich hoffe, ich hab keine weiter vergessen und hab sie nun alle... $_ Enthält in Schleifen, sofern keine anderere Variable angegeben ist, den jeweils aktuellen Wert. Das $_ wird von manchen Befehlen in Perl auch als Standartwert verwendet (siehe hier: Befehle, die $_ als Standartwert verwenden).
Weiterlesen...
Samstag, 14.4.2007, 00:00:23 Uhr
rename - Dateien und Verzeichnis umbenennen Mit dem Befehl rename können Sie Dateien und Verzeichnisse umbenennen. Der Syntax von rename lautet rename (Altername, Neuername);
Altername gibt die Datei oder das Verzeichnis an, das geändert werden soll, Neuername ist der neue Verzeichnis- bzw. Dateiname. Vorsicht Wenn der erste Parameter eine Datei ist und der zweite Parameter der Name eines anderen Verzeichnisses, wird die Datei in das andere Verzeichnis verschoben. Weiterlesen...
Freitag, 13.4.2007, 00:09:35 Uhr
rmdir - Ein Verzeichnis löschen mit Perl Mit rmdir kann man unter Perl ein Verzeichnis löschen. Dazu muß dieses Verzeichnis allerdings vollkommen leer sein, es dürfen auch keine weiteren, leeren, Unterverzeichnisse enthalten sein.
Syntax rmdir (Verzeichnis);
Wurde das Löschen erfolgreich durchgeführt, wird ein true zurückgegeben, andernfalls ein false. Zusätzlich findet man dann in $! eine Fehlermeldung im Textformat. Weiterlesen...
Donnerstag, 12.4.2007, 00:01:09 Uhr
chdir - Aktuelles Arbeitsverzeichnis definieren Mit dem Befehl chdir legen Sie ein Verzeichnis als Arbeitsverzeichnis fest. Das bedeutet, daß man, ohne sich um den Verzeichnispfasd kümmern zu müssen, Dateien bearbeiten oder Scripte starten kann, die in diesem Verzeichnis liegen.
Syntax chdir($pfad);
Der Pfadname kann dabei relativ oder absolut verwendet werden. Außerdem ist es auch möglich, daß kein Pfadname angegeben wird. Dann wird das Verzeichnis verwendet, das in der Umgebungsvariablen HOME angegeben ist. Weiterlesen...
Mittwoch, 11.4.2007, 00:02:03 Uhr
Dateitestoperatoren - Eigenschaften von Verzeichnissen und Dateien feststellen Die so genannten Dateitestoperatoren sind die schnellste und einfachste Methode in Perl, Eigenschaften von Dateien oder Verzeichnissen herauszufinden. Manche Operatoren geben dabei nur true oder false zurück, andere wiederum Zahlen, etwa die Größe einer Datei.
Den Dateitestoperatoren wird ein - vorangestellt, danach folgt der Verzeichnis- bzw. Dateiname. Also zum Beispiel:
$size=-s 'dateiname.txt'; print $size;
|
Weiterlesen...
Sonntag, 8.4.2007, 00:04:27 Uhr
rewinddir - Zeiger wieder auf den ersten Verzeichniseintrag setzen Mit dem Befehl rewinddir() wird der Lesezeiger eines Directory-Handles wieder auf den Anfang gesetzt. Man kann den Befehl dazu verwenden, wenn ein bereits (teilweise) eingelesenes Verzeichnis erneut eingelesen werden soll.
Syntax rewinddir(DIR);
Weiterlesen...
Mittwoch, 4.4.2007, 00:04:03 Uhr
closedir - Verzeichnis schließen Schließt das Handle eines Verzeichnisses, das vorher mit opendir geöffnet wurde.
Syntax opendir(verzeichnis);
opendir(my $DIR,'../') || die "Kann Verzeichnis nicht öffnen: $!"; foreach (my $eintrag=readdir($DIR)){ print "$_\n"; } closedir ($DIR);
|
Weiterlesen...
Montag, 26.3.2007, 00:04:27 Uhr
opendir() - Verzeichnis öffnen zum Auslesen in Perl Mit dem Befehl opendir() kann man unter Perl ein Verzeichnis zum Einlesen öffnen. Dies wird im Allgemeinen dazu verwendet, eine Dateiliste einzulesen um sie weiter zu verarbeiten.
Syntax $result=opendir(handle,verzeichnis);
Das handle kann frei gewählt werden, als Verzeichnis sind Angaben in relativer als auch absoluter Form erlaubt, also zum Beispiel '../test' oder '/usr/bin' (Unix) oder unter DOS 'c:/'. Weiterlesen...
Freitag, 23.3.2007, 10:31:07 Uhr
Sicheres sendmail-Script Ich habe bereits hier auf die möglichen Risiken von sendmail hingewiesen. Sendmail kann dazu verwendet werden, Spam zu versenden oder auch um Systemdateien auszulesen. Deswegen sollte man alle unzulässigen Zeichen aus extern eingelesenen Parametern am Besten mit einer Fehlermeldung entfernen. Ich habe deswegen aus aktuellem Anlaß das folgende Script nach den mir vorliegenden Erkenntnissen erstellt, so daß ein Mißbrauch ausgeschlossen werden kann. #!/usr/bin/perl
print "Content-Type: text/html\n\n"; print "<HTML>\n<HEAD>\n";
use strict; &send_mail( 'returnadresse@server.com', 'empfaenger.adresse@seinserver.com', 'absenderadresse@meinserver.com', 'Subject', 'Mailtext' );
print "OK, Mail versandt...";
sub send_mail{ local *SENDMAIL; my $ok=''; my $SENDMAIL='';
my $returnadresse=shift; my $to=shift; my $from=shift; my $subject=shift; my $mailtext=shift;
# gültige Zeichen in Mailadressen sind: # a-z A-Z 0-9 _ \- \+ \* \$ \. \@ # falls andere Zeichen auftreten -> STOPP die ('wrong returnadresse') if ($returnadresse=~ /[^a-zA-Z0-9_\-\+\*\$\.\@]/); die ('wrong to:') if ($to=~ /[^a-zA-Z0-9_\-\+\*\$\.\@]/); die ('wrong from:') if ($from=~ /[^a-zA-Z0-9_\-\+\*\$\.\@]/); die ('no mailtext') if ($mailtext eq ''); die ('no subject') if ($subject eq ''); die ('wrong subject') if ($subject=~ /[\n\0\t\r\0\|]/);
my @sendmails=( '/usr/sbin/sendmail', '/usr/bin/sendmail', '/usr/lib/sendmail' );
# prüfen, wo sendmail sich befindet foreach (@sendmails){ if (open (SENDMAIL,"|$_ -t")){ $SENDMAIL=$_; close SENDMAIL; last; } }
die ('Can not find sendmail!!!') if ($SENDMAIL eq '');
open (SENDMAIL,"|$SENDMAIL -t -f $returnadresse") || die('can not open sendmail'); print SENDMAIL <<EOF; To: $to Subject: $subject From: $from Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit
$mailtext EOF close SENDMAIL; }
|
Beschreibung In der Funktion send_mail werden zuerst alle Parameter eingelesen, und zwar in der Reihenfolge: Returnadresse, falls eine Mail nicht zugestellt werden kann oder der Empfänger antworten will Weiterlesen...
Donnerstag, 22.3.2007, 13:27:48 Uhr
Mails versenden mit Perl - Sendmail Jeder, der Perl dazu verwendet, um Internetseiten zu betreiben bzw. Internetdienste betreibt, steht irgendwann vor dem Problem, daß er auch mal eine oder auch mehrere Emails versenden will bzw. muß.
Der meist verwendete Ansatz ist die Verwendung von sendmail. Sendmail ist ein Systemdienst von Unix bzw. Linux (das ja ein Unix-Derivat ist). Eine Lösung könnte z.B. so aussehen:
$text="Dies ist der Text, der versendet werden soll. Natürlich ist dies nur zum Ausprobieren gedacht";
$SENDMAIL='/usr/sbin/sendmail'; open (SENDMAIL,"|$SENDMAIL -t -f -odq meine.mailadresse\@mein-server.de") || &fehler("Kann sendmail nicht öffnen"); print SENDMAIL <<EOF; To: $sendto Subject: $subject From: meine.mailadresse\@mein-server.de Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit
$text EOF
close SENDMAIL;
|
Weiterlesen...
|