Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6970[/thread]

Aktuellstes Bild auslesen, kopieren + abspeichern (Seite 2)

Leser: 2


<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
Ronnie
 2005-05-08 22:14
#54681 #54681
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Es gibt eine Apache-Direktive die ihm verbietet SymLinks zu folgen, evtl. ist sowas das Problem. Ich weiß nicht ob man das via .htaccess aufheben kann?!
joachim
 2005-05-08 22:17
#54682 #54682
User since
2005-05-08
6 Artikel
BenutzerIn
[default_avatar]
aha. .htaccess gibt es. ist jedoch noch keine gesetzt. und die gelten laut beschreibung nur für den zugriffsschutz.

mal ne frage. anstatt das das script nen symlink anlegt, kann es denn da nicht einfach auch die datei (die als sie aktuellste gefunden wurde) kopieren und als aktuell.jpg speichern?!
Ronnie
 2005-05-08 22:36
#54683 #54683
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

use strict;
use warnings;

my $newest = shift @{[sort {-M $a > -M $b} (<img*.jpg>)]};
#print $newest, "\n";
unlink 'aktuell.jpg' or die "$!" if -e 'aktuell.jpg';
system "cp $newest aktuell.jpg";

sollte klappen!
joachim
 2005-05-09 00:47
#54684 #54684
User since
2005-05-08
6 Artikel
BenutzerIn
[default_avatar]
Leute:
Vielen vielen Dank! Es klappt nun so wie es soll!
Hätt net gedacht, das das mit so wenig code geht. Wenn ich mich doch nur schon eingelesen hätt in perl. Das man so sortiert hätt ich nie herausgefunden.
Vielen Dank nochmal und bis die Tage,
Joachim.
Dubu
 2005-05-09 10:42
#54685 #54685
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Ronnie,08.05.2005, 20:36]
Code: (dl )
1
2
...
system "cp $newest aktuell.jpg";

sollte klappen![/quote]
Der system-Aufruf hier ist nicht gut. Einerseits existiert mit File::Copy eine schoene, betriebssystemunabhaengige Loesung zum Kopieren von Dateien, die auch noch zur Standarddistribution gehoert. In der vorliegenden Form wuerde der Aufruf auch fehlschlagen, wenn der Dateiname in $newest Leerzeichen enthielte.

Andererseits laesst sich das Problem hier einfach mit link(), d.h. einem Hard Link, statt symlink() loesen. Das umgeht das Problem der Symlink-Konfiguration im Apache, geht deutlich schneller,  verbraucht keinen zusaetzlichen Speicherplatz und funktioniert laut perlport im Gegensatz zu symlink() sogar unter NTFS.
Code: (dl )
1
2
...
link $newest, 'aktuell.jpg';
Ronnie
 2005-05-09 10:56
#54686 #54686
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ja, auf system greife ich auch nur ungern zurück. File::Copy ist mir glatt entgangen, weil ich bis jetzt nur sehr wenig in dieser Richtung gemacht habe. Über die Hardlinks hatte ich bereits nachgedacht weil ich keinen copy-Befehl in perlfunc gefunden habe. Ich war mir aber nicht mehr sicher ob ich bei einem Hardlink mit dem unlink nicht auch da Original entferne?!
Dubu
 2005-05-09 11:06
#54687 #54687
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Ronnie,09.05.2005, 08:56]Ich war mir aber nicht mehr sicher ob ich bei einem Hardlink mit dem unlink nicht auch da Original entferne?![/quote]
Nein. Ein Hardlink ist ein zweiter Verzeichniseintrag, der auf dieselben Daten zeigt wie der erste. De facto ist jeder Verzeichniseintrag fuer eine Datei ein Hardlink und gleichwertig zu allen anderen. Ein unlink() entfernt den bezeichneten Eintrag, die Daten werden aber erst dann auf der Platte freigegeben, wenn der letzte Hardlink entfernt wurde.
Ronnie
 2005-05-09 11:13
#54688 #54688
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Schön, das ist wie mit Variablen auf die noch Referenzen existieren. Gut zu wissen für die Zukunft. Danke!
Dubu
 2005-05-09 11:38
#54689 #54689
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Genau. Und Symlinks sind dagegen wie C-Pointer: Wenn jemand das Objekt an der Zieladresse loescht, dann zeigt der Pointer ins Leere. :)
Strat
 2005-05-09 18:34
#54690 #54690
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nebenbei: wenn sehr viele Dateien in diesem Verzeichnis liegen, ist
Code: (dl )
my $newest = shift @{[sort {-M $a > -M $b} (<img*.jpg>)]};

recht langsam, weil fuer jeden Vergleich -M komplett neu ermittelt werden muss... und das kann dauern; abhilfe schafft da z.B.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use FindBin;
my $dir = $FindBin::Bin;# aktuelles verzeichnis
opendir(DIR, $dir) or die $!;

my ($lastM, $fileNewest);
while (my $file = readdir(DIR)) {
 next unless $file =~ /\.[Jj][Pp][Gg]$/;
next unless -f "$dir/$file";
 if (-M _ > $lastM) {
   $lastM = -M _;
   $fileNewest = "$dir/$file";
 }
} # while
if (defined $lastM) {
 print "Datei: $fileNewest\n";
} # if
closedir(DIR);

[edit]so klappts auch, wenn ein verzeichnis z.B. x.jpg heisst...[/edit]\n\n

<!--EDIT|Strat|1115652146-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2005-05-08 16:34.