Funktion open will nicht so, wie ich will
Pit
- perl
Hallo,
kann mir einer sagen, warum in meinem Script an dieser Stelle:
print "$db\_file\_name"; #debugging information
open(DB, "<$db_file_name") die "Cant open: \n";
if ($db_use_flock) {
flock (DB, 1);
}
@lines = <DB>;
close DB;
folgende Ausgabe erscheint:
/usr/local/httpd/cgi-bin/dbman/Test.db
obwohl ich sichergestellt hatte, daß die Datei Test.db definitiv nicht existiert???
Pit
Hi,
also so wie's da steht, ist der wert von:
$db_file_name = '/usr/local/httpd/cgi-bin/dbman/Test.db'
und wird in der Zeile:
»» print "$db_file_name"; #debugging information
ausgegeben.
Allerdings sollte wenn die datei tatsächlich nicht existiert, noch
"Cant Open:"
erscheinen inklusive das das Programm gestorben ist.
Struppi
Hi,
also so wie's da steht, ist der wert von:
$db_file_name = '/usr/local/httpd/cgi-bin/dbman/Test.db'
und wird in der Zeile:»» print "$db_file_name"; #debugging information
ausgegeben.
Allerdings sollte wenn die datei tatsächlich nicht existiert, noch
"Cant Open:"
erscheinen inklusive das das Programm gestorben ist.Struppi
Tja, denke ich auch! Und genau das ist das Problem, das ich habe.
Weil genau aus diesem Grunde mein komplettes Script nicht läuft.
Pit
hi,
Tja, denke ich auch! Und genau das ist das Problem, das ich habe.
Weil genau aus diesem Grunde mein komplettes Script nicht läuft.
könnte es eventuell sein, dass du das script nur im browser testest?
ist nur so ein verdacht.. denn dann wird die die() nachricht nicht angezeigt.
das müsstest du dann aus debugging zwecken entweder von der konsole testen oder
die() durch folgendes ersetzen:
{print "can't open blahblah\n"; exit 0};
statt exit() geht auch die() ich weiß selbst nicht genau was besser ist, ich weiß nichtmal wozu die 0 hinter exit ist ;) hauptsache es funzt.
danny
hi,
das müsstest du dann aus debugging zwecken entweder von der konsole testen oder
die() durch folgendes ersetzen:
{print "can't open blahblah\n"; exit 0};
statt exit() geht auch die() ich weiß selbst nicht genau was besser ist, ich weiß nichtmal wozu die 0 hinter exit ist ;) hauptsache es funzt.danny
gruesse,
also wenn das ganze mit apache macht wird, dann werden alle meldungen von 'die' in den error_log geschrieben.
das kann man wenn man will auch aendern, doku vom apache lesen, sollte man aber nicht.
der grund ist, dass der apache STDERR in die error_log-datei umlenkt, weil es ja dem admin
nichts bringt, wenn die fehlermeldungen irgendwo bei einem browser landet.
mein vorschlag:
#start code
print "open $db_file_name"; #debugging information
if(open(DB, "$db_file_name") ) #beim lesen brauchen wir kein '<'
{
flock (DB, 1) if ($db_use_flock); #wozuauchimmer
@lines = <DB>;
&machwas(@lines);
close DB;
}
else
{
print "nix da mit dateilesen! probiers spä wieder"; # was nettes fuer den surfer
warn("Error unable to open $db_file_name, reason:$!\n";
}
#end code
oder so aehnlich.
dann noch oefters mal den error_log mit ansehen, ist zwar laestiger aber es muessen
nicht alle scripts fuer den live-betrieb geaendert werden.
hi
mein vorschlag:
»» flock (DB, 1) if ($db_use_flock); #wozuauchimmer
warum wozuauchimmer?
ich benutze flock() eigentlich immer, da mir ohne schon oft diverse textdatenbanken gecrashed sind.
leider weiß ich nicht viel darüber (vor/nachteile) ausser halt was seine funktion ist.
würde mich also interessieren, was dein "wozuauchimer" kommentar zu bedeuten hatte :)
danny
hi
mein vorschlag:
»» flock (DB, 1) if ($db_use_flock); #wozuauchimmer
warum wozuauchimmer?
ich benutze flock() eigentlich immer, da mir ohne schon oft diverse textdatenbanken gecrashed sind.
leider weiß ich nicht viel darüber (vor/nachteile) ausser halt was seine funktion ist.
würde mich also interessieren, was dein "wozuauchimer" kommentar zu bedeuten hatte :)danny
gruesse,
naja, ich verwende ja auch flock, aber nur , wenn ich in die datei schreiben will, und dann exklusiv. und rasch
beim lesen denk ich, ist ein wie auch immer geartetes locking ueberfluessig. sonst passierts,
dass immer nur einer diesen file lesen kann, was im web so ziemlich einzigartig waere. denk ich.
also dann,
klaus
hi!
(hier wieder ein beispiel für einen interessanten thread den ich fast vergessen hätte! gerade durch zufall (suchfunktion) wiederentdeckt..)
naja, ich verwende ja auch flock, aber nur , wenn ich in die datei schreiben will, und dann exklusiv. und rasch
beim lesen denk ich, ist ein wie auch immer geartetes locking ueberfluessig. sonst passierts,
dass immer nur einer diesen file lesen kann, was im web so ziemlich einzigartig waere. denk ich.
ich dachte der flock zum schreiben funktioniert auch nur, wenn die files auch geflockt (ehm.. :) werden wenn sie gelesen werden?
und so weit ich weiß kann ein prozess mit flock 1 eine geflockte (sorry, ich kenn die fachbegriffe nicht :) datei sehr wohl lesen, solange das flock nicht exklusiv ist..
(was wäre sonst der unterschied?)
Danny