dateienspeichern in unterverzeichnissen
Hannes
- perl
0 Calocybe0 Hannes0 Der Linke Setzer0 Calocybe0 Hannes
Hallo,
mit folgendem Skript will ich Daten in eine neu einzurichtende Datei in ein Unterverzeichniss speichern.
Die klappt jedoch nur auf erster ebene (../verzeichnis1/datei.txt), nicht eine ebene tiefer (../verzeichnis1/verzeichnis2/datei.txt)
Es handelt sich um einen Unix Server, auf dem folgendes Skript (z.B. läuft:
#!/usr/bin/perl -w
use strict;
use vars qw/$globalpfad %schonangezeigt $kopfschonangezeigt $fehlerseite %INPUT @datensatz/;
print "Content-type: text/html\n\n";
open(DATEI, ">../verz1/verz2/test.txt") || die "Datei wurde nicht gefunden!!!";
#in verz1 kann ich speichern, in verz2 nicht!
my $lockedfile="true";
if ($lockedfile)
{flock(DATEI, $lockedfile);}
print DATEI 'ein blöder Text für eine blöden Test';
close(DATEI);
print "Der Text wurde ausgegeben";
Moin!
Die klappt jedoch nur auf erster ebene (../verzeichnis1/datei.txt), nicht eine ebene tiefer (../verzeichnis1/verzeichnis2/datei.txt)
Hast Du Schreibrechte?
#!/usr/bin/perl -w
use strict;
Schonmal sehr gut! Sieht man viel zu selten.
open(DATEI, ">../verz1/verz2/test.txt") || die "Datei wurde nicht gefunden!!!";
Gut ist, dass Du ueberhaupt auf den Fehlerfall eingehst. Schlecht ist, dass Deine Fehlermeldung nicht gerade das Attribut "sinnvoll" verdient. Nimm stattdessen besser sowas:
my $filename = "../verz1/verz2/test.txt";
open(DATEI, ">$filename") || die("Can't open $filename for writing because: $!";
Achte vor allem auf die Variable $!, die sagt Dir naemlich, was das denn fuer ein Fehler war, der aufgetreten ist. Wenn Du dann also eine vernuenftige Fehlermeldung hast, wirst Du das Problem sicher ohne weiteres loesen koennen.
#in verz1 kann ich speichern, in verz2 nicht!
my $lockedfile="true";
if ($lockedfile)
{flock(DATEI, $lockedfile);}
Dieser Code ist in dieser Form ziemlich sinnbefreit.
print DATEI 'ein blöder Text für eine blöden Test';
close(DATEI);
Hier noch Fehlerfall abfangen und je nachdem, wie es im Script weitergeht, entweder 'die' verwenden (wie oben bei open) oder nur eine Fehlermeldung ausgeben und weitermachen. Letzterer Fall ginge so:
close(DATEI) or print STDERR "Failed to close $filename because: $!\n";
So long
Hallo!
Hast Du Schreibrechte?
Alle da. Klappt ja auch im Verzeichnis, nur im Unterverzeichnis nicht.
#!/usr/bin/perl -w
use strict;
Schonmal sehr gut! Sieht man viel zu selten.
Na, bei derart guten Tutoren wie Dir!!!
my $lockedfile="true";
if ($lockedfile)
{flock(DATEI, $lockedfile);}
Dieser Code ist in dieser Form ziemlich sinnbefreit.
Ich wollte nur, das diese Datei nicht zweimal zum schreiben geoeffnet ist - und in slefhtml hab ich das dazu gefunden.
wenn ich nicht "true" zuweise geht irgendwie nix...
Also: stand der DInge ist: bei untenstehendem Skript gibt er wie gehabt auf erster ebene ein ergebnis aus, auf zweiter Verzeichnisebene nix (also nichtmal eine fehlermeldung).
Oder werden die Fehlermeldungen irgendwo anders gespeichert (Es findet sich keine error.txt auf dem Server)???
Das Skript sieht derzeit wie folgt aus:
#!/usr/bin/perl -w
use strict;
print "Content-type: text/html\n\n";
my $filename="../data/news/tost.txt";
open(DATEI, ">".$filename) || die "Cant open $filename because of: $! ";
my $lockedfile="true";
if ($lockedfile)
{flock(DATEI, $lockedfile);}
print DATEI 'ein blöder Text für eine blöden Test';
close(DATEI) or print STDERR "Failed to close $filename because: $! \n";
print "Der Text wurde ausgegeben";
Also: stand der DInge ist: bei untenstehendem Skript gibt er
wie gehabt auf erster ebene ein ergebnis aus, auf zweiter
Verzeichnisebene nix (also nichtmal eine fehlermeldung).
Oder werden die Fehlermeldungen irgendwo anders gespeichert
(Es findet sich keine error.txt auf dem Server)???
Hi again!
Na, bei derart guten Tutoren wie Dir!!!
Haha, Du willst wohl, dass ich rot werde? Naja, hat geklappt. ;-)
my $lockedfile="true";
if ($lockedfile)
{flock(DATEI, $lockedfile);}
Dieser Code ist in dieser Form ziemlich sinnbefreit.
Ich wollte nur, das diese Datei nicht zweimal zum schreiben geoeffnet ist - und in slefhtml hab ich das dazu gefunden.
wenn ich nicht "true" zuweise geht irgendwie nix...
Also ich weiss jetzt auf Anhieb auch nicht, wie's richtig geht - so wie oben jedenfalls nicht. Lies Dir auf jeden Fall mal die Doku zu flock durch, also
perldoc -f flock
Evtl. stellst Du die Frage nochmal separat, oder schaust mal im Archiv nach, da muesste auch einiges stehen.
Also: stand der DInge ist: bei untenstehendem Skript gibt er wie gehabt auf erster ebene ein ergebnis aus, auf zweiter Verzeichnisebene nix (also nichtmal eine fehlermeldung).
Oder werden die Fehlermeldungen irgendwo anders gespeichert (Es findet sich keine error.txt auf dem Server)???
Klingt, wie wenn Du das Script ueber den Browser aufrufst. Ja, dann werden die die-Meldungen und das, was print STDERR ausgibt, *nicht* an den Browser gesendet, sondern ins Errorlog des Webservers. (Wo das wiederum ist, musst Du den Provider fragen.)
Falls Du telnet-Zugang hast, starte das Script einfach von der Kommandozeile, dann erscheinen die Fehlermeldungen dort direkt. Oder schau bei des Linken Setzers Link, wie man die Meldungen doch noch zum Browser geschickt bekommt.
So long
heda
dank euch nochmal für die Antworten. ich probier das morgen mal aus - melde mich dann hoffentlich nicht mehr :-)
Hannes