Erstellt vor 3 Jahren
Geschlossen vor 2 Jahren
#1926 closed Fehler (fixed)
Zufälliger Dateiname für PDF Spooldateien
| Erstellt von: | grichardson@… | Verantwortlicher: | m.bunkus@… |
|---|---|---|---|
| Priorität: | normal | Meilenstein: | 3.0.0 |
| Komponente: | kivitendo ERP | Version: | 2.7.0 |
| Schweregrad: | normal | Stichworte: | |
| Beobachter: |
Beschreibung (zuletzt geändert von m.bunkus@…)
Ähnlicher Fall wie Bug #1747, aber nicht für die .tex sondern die .pdf Datei.
Wenn man in die Warteschlange (queue) druckt landet die Datei in spool/ und der Dateiname wird in status gespeichert. Dateiname ist unix time + PID
Wenn in der gleichen Sekunde 2 PDFs erstellt werden, was bei einem Massendruck von mir vorkommt, wird eine der PDFs überschrieben.
Der betreffende Code ist in bin/mozilla/io.pl in sub print_form
if ($form->{media} eq 'queue') {
my %queued = map { s|.*/ } split / /, $form->{queued};
my $filename;
if ($filename = $queued{ $form->{formname} }) {
$form->{queued} =~ s/\Q$form->{formname} $filename\E;
unlink $::lx_office_conf{paths}->{spool} . "/$filename";
$filename =~ s/\..*$g;
} else {
$filename = time;
$filename .= $$;
}
Ich habe keine Ahnung, ob die erste Bedingung des IFs jemals erfüllt wird.
Wenn es keine Einwände gibt würde ich die gleiche Lösung wie in für Bug 1747 nehmen.
Änderungshistorie (7)
comment:1 Geändert vor 3 Jahren durch m.bunkus@…
- Beschreibung geändert (Diff)
comment:2 Geändert vor 3 Jahren durch m.bunkus@…
- Status von new nach assigned geändert
- Verantwortlicher von m.bunkus@… nach grichardson@… geändert
comment:3 Geändert vor 3 Jahren durch grichardson@…
Ich hab nochmal geschaut, macht die Tempfile-Lösung hier denn Sinn, es ist ja gerade keine temporäre Datei, sondern sie bleibt so lange erhalten, bis der Benutzer sie an der Oberfläche im Druckmenü löscht.
Meine erste Idee ist mal wieder ein int(rand(256)) dranzuhängen, oder man könnte überprüfen, ob es schon eine Datei mit dem Namen gibt und nur dann zufällig erweitern. Oder ist Tempfile trotzdem OK?
comment:4 Geändert vor 3 Jahren durch m.bunkus@…
Der Name der temporären Datei wird in der Datenbank gespeichert (andernfalls würde ja auch der bisherige Dateiname nicht rekonstruierbar sein). Zufällig darf er also sein.
Deine Frage meint bestimmt die direkte Verwendung der Funktion File::Temp::tempfile, oder? Klar ergibt die Sinn, sie darf die Datei nur nicht direkt löschen. Das ist trivial über den Parameter UNLINK => 0 zu erledigen.
comment:5 Geändert vor 2 Jahren durch m.bunkus@…
- Meilenstein auf 3.0.0 gesetzt
comment:6 Geändert vor 2 Jahren durch m.bunkus@…
- Status von assigned nach accepted geändert
- Verantwortlicher von grichardson@… nach m.bunkus@… geändert
comment:7 Geändert vor 2 Jahren durch m.bunkus@…
- Lösung auf fixed gesetzt
- Status von accepted nach closed geändert

Tu es.