Codeschnipsel zum Dateihandling
Hier werde ich verschiedene Beispielroutinen auflisten die man mit mehr oder weniger Aufwand schnell einsetzen kann.
Beispiele und weiterführende Erklärungen gibt es dann in den jeweiligen Workshops.
1. Datei auslesen, normale Datei mit mehreren Zeilen
open (DATEI, "<$dateipfad/meintext.txt");
flock (DATEI, 2);
@meintext = <DATEI>;
close DATEI;
Ausgabe der Datei:
print "Content-type: text/html\n\n";
print "@meintext\n";
Top
2. Datei auslesen, normale Datei mit Trennzeichen für den Datensatz
Hinweis! Hier wird von einer Zeile in der Datei ausgegangen
open (DAT, "<$dateipfad/daten.dat");
flock (DAT, 2);
$linie=<DAT>;
close DAT;
($id,$url,$datum,$email)= split(/\|/,$linie);
Ausgabe der Datei:
print "Content-type: text/html\n\n";
print "$id\n";
print "$url\n";
print "$datum\n";
print "$email\n";
Das ganze kann natürlich auch in anderen Arten formatiert werden.
Top
2.1 Datei auslesen, mehrere Zeilen, normale Datei mit Trennzeichen für den Datensatz
open (DAT,"<daten.dat");
flock (DAT, 2);
@DATEI=<DAT>;
close (DAT);
print "Content-type: text/html\n\n";
print "<table border=\"1\">";
foreach $eintraege (@DATEI){
chomp($eintraege);
($id,$url,$datum,$email)=split(/\|/,$eintraege);
print "<tr><td>$id</td><td>$url</td><td>$datum</td><td>$email</td></tr>\n";
}
print "</table>";
Top
3. Datei schreiben/überschreiben, normale Datei ohne Trennzeichen für den Datensatz
open (FILE, ">$dateipfad/daten.dat");
flock (FILE, 2);
print FILE "Der Text der in der Datei gespeichert wird.";
close FILE;
oder
open (FILE, ">$dateipfad/daten.dat");
flock (FILE, 2);
print FILE "$meintext";
close FILE;
Top
4. Datei schreiben/Daten anhängen, normale Datei mit Trennzeichen für den Datensatz
open (FILE, ">>$dateipfad/daten.dat");
flock (FILE, 2);
print FILE "Der Text der in der Datei gespeichert wird.|Weiterer Text\n";
close FILE;
oder
open (FILE, ">>$dateipfad/daten.dat");
flock (FILE, 2);
print FILE "$email|$url|$name\n";
close FILE;
Top
5. HTML-Datei anlegen und CHMOD setzen
open(INDEX_DATEI, ">$userverz/userdaten/index.html");
print INDEX_DATEI<<HTML_CODE;
<HTML>
<HEADER><TITLE>Zugriff verweigert</TITLE>
</HEADER>
<BODY BGCOLOR="WHITE" TEXT="BLACK">
<font face="arial, helvetica" size=2>
Dateiinhalte...
</BODY>
</HTML>
HTML_CODE
close INDEX_DATEI;
chmod(0666, "$userverz/userdaten/index.html");
Top
6. Leere Datei anlegen und CHMOD setzen
open(DATEI, ">$userverz/daten.dat");
close DATEI;
chmod(0666, "$userverz/daten.dat");
Top
7. Datei löschen
unlink("$userverz/daten.dat");
Top
8. Alle Dateien eines Verzeichnisses löschen
opendir(DIR,"$datenpfad/Daten");
@files=readdir(DIR);
closedir(DIR);
foreach(@files){
unlink("$datenpfad/Daten/$_");
}
Top
9. CHMOD setzen auf alle Dateien eines Verzeichnisses
opendir(DIR,"$datenpfad/Daten");
@files=readdir(DIR);
closedir(DIR);
foreach(@files){
chmod(0777, "$userverz/$_");
}
Top
10. Ein Verzeichnis anlegen
mkdir("$datenpfad/Verzeichnis");
MERKE! Erst Verzeichnis anlegen, dann Dateien erzeugen
Top
11. Ein Verzeichnis löschen
rmdir("$datenpfad/Verzeichnis");
MERKE! Erst Dateien alle löschen aus Verzeichnis, dann Verzeichnis löschen
Top
12. Daten per Query String übermitteln
Mitunter werden Daten auch als Query String an die URL angehängt übermittelt. Hier ein Beispiel wie diese dann wieder
ausgelesen und dargestellt werden können.
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
@wertepaare = split(/&/, $ENV{'QUERY_STRING'});
foreach $wertepaar (@wertepaare)
{
($name, $value) = split(/=/, $wertepaar);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/~!/ ~!/g;
$value =~ s/\|/%7C/g;
$FORM{$name} = $value;
}
print "Content-type: text/html\n\n";
print qq~
Aus dem Query String der URL wurden folgende Werte ermittelt:<br>
Name: $FORM{'name'}<br>
Email: $FORM{'email'}<br>
Datum: $FORM{'datum'}<br>
~;
Zum testen kann man das komplette Script abspeichern und einmal mit so einem Link aufrufen:
http://www.ihredomain.de/cgi-bin/query.pl?name=Max Mustermann&email=webmaster@ihredomain.de&datum=3.6.2002
Hinweise!
Ein Query String ist der Abschnitt der nach dem ? kommt.
Die einzelnen Abschnitte werden mit &name=wert getrennt.
Es ist nicht möglich riesige Dateiinhalte so zu übermitteln.
Top
13. Letzte Zeile einer Datei auslesen
Mitunter werden Daten auch als Query String an die URL angehängt übermittelt. Hier ein Beispiel wie diese dann wieder
ausgelesen und dargestellt werden können.
# letzte Zeile einer Datei auslesen
open (DATEI, "<cat.txt");
@data = <DATEI>;
close (DATEI);
print "@data[-1]";
- 1 deshalb weil bei den meisten Dateien am Ende ein Zeilenumbruch steht.
Top
|