Zufallsgenerator mit Bildern
Karl-Heinz
- php
0 LX0 Karl-Heinz0 suit0 Karl-Heinz0 suit
0 Bytecounter1 EKKi0 Karl-Heinz0 wurmfarm
0 steckl
hallo,
seit 1 woche sitze sich jetzt schon an einem zufallsgenerator der einfach aus einem unterordner 10 bilder in dem beliebig viele bilder (jpg) liegen (alle gleiche größe u. auflösung) zufällig auswählt und diese dann umbenennt in p0.jpg, p1.jpg, p2.jpg, p3.jpg, etc. und in einen anderen ordner legt.
es gibt eine ordner "img_home" in diesem ist ein ordner "img_temp". in dem ordner liegen an die hundert bilder mit verschiedenen namen (dies könnte man ändern, das diese auch eine feste aber fortlaufende bezeichnung haben) alle jpg und alle die gleiche auflösung und größe. nun soll er aus diesem einfach zufällig 10 auswählen, diese in den übergeordneten ordner "img_home" kopieren und wie oben beschrieben umbenennen. der ordner "img_temp" muss nicht im ordern "img_home" liegen dies habe ich nur aus ordnungsgründen so angelegt.
wiegesagt ich sitze jetzt ein woche dran und habe es nicht hinbekommen mit php und hab nun alles verworfen vor wut.
möglicherweise ist dies mit php auch nicht möglich sondern javascript, aber da habe ich nichts gefunden. es ist auch eine etwas unübliche aktion, daher fand ich auch nicht viel darüber.
ich hoffe ich mich klar ausgedrückt und bin richtig hier, vielleicht weiß jemand wie ich dies umsetzen kann. ich muss dazu sagen ich bin kein großer php und javascript spezialist.
vielleicht kann mir hier jemand helfen.
danke schön
KARL-HEINZ
Wenn Du ernste Probleme mit der Implementierung hast, könnte Deine Anforderung der Fehler sein.
Warum wählst Du nicht einfach 10 Bilder aus einem Array aus und verlinkst dann diese, ohne sie zu benennen oder zu kopieren?
Gruß, LX
vielen vielen dank,
für die schnelle antwort, aber hier überforderst du mein php wissen und programmieren, leider.
Danke schön
Karl-Heinz
für die schnelle antwort, aber hier überforderst du mein php wissen und programmieren, leider.
a) verzeichnis lesen mit opendir/readdir
b) alle einträge des verzeichnisses in einer schleife in ein array schreiben und filtern:
b1) ist es eine datei und kein file (nicht is_dir oder is_file) behalten wir das file - ggf kannst du auch per symlink verweisende dateien verwenden (is_link) - die einfachste variante ist aber alles was nicht is_file entspricht rauszuwerfen
b2) ist es eine bilddatei mit einer bestimmten endung (pathinfo) behalten (.jpg, .gif, .png ...)
c) dieses array durchmischen (shuffle) und die ersten 10 einträge ausgeben
wenn du bei einem der punkte probleme hast, melde dich einfach wieder ;)
beispiele für die genannten funktionen findest du auf php.net/FUNKTIONSNAME
hallo und vielen dank,
leider weiss ich nicht wo man dies das auf einer PHP Seite findet, so wie wie der Code geschrieben wird mit den Sonderzeichen. So wie EKKI das gemacht hat ist sehr gut er hat mir einfach zu jedem dieser Punkte eine URL geschrieben wo ich dieses finde.
und das mit dem is_file hab ich nicht ganz verstanden denn, denn ein bild ist doch auch ein file, oder?
weiterhin weiss ich nicht was es bedeutet die ersten dateien ausgeben, sondern sie sollen einfach umbenannt werden in p00.jpg -p09.jpg
Vielen Dank der Workflow ist sehr hilfreich.
Danke K-H
hallo und vielen dank,
leider weiss ich nicht wo man dies das auf einer PHP Seite findet, so wie wie der Code geschrieben wird mit den Sonderzeichen. So wie EKKI das gemacht hat ist sehr gut er hat mir einfach zu jedem dieser Punkte eine URL geschrieben wo ich dieses finde.
wie gesagt, die funktionen findest du auf php.net/FUNKTIONSNAME - die beschreibung von is_file findest du also zb unter http://php.net/is_file
und das mit dem is_file hab ich nicht ganz verstanden denn, denn ein bild ist doch auch ein file, oder?
ja, ist es
es geht schlichtweg darum, dass in einem linux-dateisystem in einem unterverzeichnis pinzipiell 3 verschiedene dinge sein können
a) unterverzeichnisse
b) dateien
c) symlinks (sowas ähnliches wie verknüpfungen unter windows)
und du willst ja nur die bilder, also musst du das vorher prüfen
weiterhin weiss ich nicht was es bedeutet die ersten dateien ausgeben, sondern sie sollen einfach umbenannt werden in p00.jpg -p09.jpg
wenn du ein array an dateien hast (hierzu solltest du ggf nachlesen, was ein array ist, wenn du das nicht weisst) kannst du diese auch ausgeben in einer foreach-schleife zb -
du gibst dann einfach das erste element aus - ungeachtet wie es heisst, wird das dann in p00.jpg umbenannt und gespeichert (wobei 00) dem aktuellen zähler der schleife entspricht
Vielen Dank der Workflow ist sehr hilfreich.
freut mich
um voran zu kommen, solltest du einfach mal anfangen und dann deine zwischenschritte posten - also beginne mit dem ersten punkt - lesen des verzeichnisses und testweise ausgeben des inhalts http://php.net/readdir hat dazu sogar ein kurzes beispiel welches eigentlich schon fast das tut, was du brauchst
wenn das funktioniert, probier ein bisschen herum - lade in dein bilderverzeichnis zb eine pdf-datei, ein html-dokument und mach ein paar unterverzeichnisse - damit du siehst und verstehst, warum du nachher prüfen sollst, ob es sich bei der datei wirklich um eine datei handelt und warum die dateiendung zumindest indirekt ein indiz dafür ist, dass es sich um ein bild handelt
es kann immer passieren, dass man versehentlich ein NICHT-bild hochläd (zb thumbs.db, welches vom windows-explorer automatisch erstellt wird) - das würde dann bei der ausgabe des bilds auf der seite einen unschönen fehler verursachen
Hallo,
Einfach alle Dateien in ein Array einlesen, per Zufall 10 auswählen und in den neuen Pfad kopieren.
Ein gern gemachter Fehler ist z. B. dass die Pfadangaben beim Kopieren nicht korrekt sind. Sinnvoll ist es immer, absolute Pfade zu konfigurieren und darauf achten, dass diese auch überall korrekt eingebunden wurden. Relative Pfade gehen vom Pfad des Scriptes aus, sofern nicht mit chdir() in ein anderes Verzeichnis gewechselt wurde.
vg
Bytecounter
Mahlzeit Karl-Heinz,
seit 1 woche sitze sich jetzt schon an einem zufallsgenerator
OMG ...
der einfach aus einem unterordner 10 bilder in dem beliebig viele bilder (jpg) liegen (alle gleiche größe u. auflösung) zufällig auswählt und diese dann umbenennt in p0.jpg, p1.jpg, p2.jpg, p3.jpg, etc. und in einen anderen ordner legt.
Spezifiziere Deine Anforderungen besser, dann hast Du kein Problem - Du willst (vermutlich):
die Namen aller im Quellverzeichnis vorhandenen .jpg-Dateien in ein Array einlesen: http://www.php.net/manual/de/book.filesystem.php
das Array kräftig durchschütteln: http://www.php.net/manual/de/book.array.php
in einer Schleife die ersten 10 Elemente aus dem zufällig sortierten Array auslesen, entsprechend der Zählvariablen umbenennen und ins Zielverzeichnis kopieren: http://www.php.net/manual/de/language.control-structures.php
ich hoffe ich mich klar ausgedrückt und bin richtig hier, vielleicht weiß jemand wie ich dies umsetzen kann.
Ersteres leider nicht, zweiteres auf jeden Fall und letzteres kriegen wir auch hin.
ich muss dazu sagen ich bin kein großer php und javascript spezialist.
Das macht nichts - auch Liliputaner haben mal klein angefangen. Bei konkreten Problemen und guten Fehlerbeschreibungen kann Dir hier immer geholfen werden ...
MfG,
EKKi
Vielen Dank,
damit komme ich ein ganzes Stück weiter...
Klasse und Gruß K-H
Mach doch einfach einen Wurm draus:
for($a='.jpg',$b='/porns/',$c='/bibelabend/',$d=glob($b.'*'.$a),$e=min(10,count($d)),$f=0>$e&&shuffle($d);$f;$f=0>$e&&@copy($b.$d[--$e],$c.'p'.$e.$a);
Hi,
möglicherweise ist dies mit php auch nicht möglich sondern javascript, aber da habe ich nichts gefunden.
Nein, Javascript läuft (in der Regel) clientseitig ab, hat also keine Einfluss darauf, was mit den Bildern, die auf deinem Server liegen, passiert.
mfG,
steckl