OK das hat funktioniert. Ich musste noch mit nem trim meine Daten bereinigen da dort Zeilenümbrüche usw. drin waren. Jetzt funktioniert das aber tadellos.
Ich bastel grade an ner Funktion welche auch tiefer liegende Verzeichnisse erkennt und ggf. anlegt.
Beispiel der vorhandenen Ordnerstruktur:
/workdir <-- Arbeitsverzeichnis
/workdir/upload <-- Verzeichnis in das alles rein geladen wird
/workdir/pics <-- Ordner für Bilder
/workdir/pics/kategorie1 <-- Kategorie 1 der Bilder
/workdir/pics/kategorie2 <-- Kategorie 2 der Bilder
Jetzt sagen wir ich lade Bilder hoch welche von einer Person namens Peter gemacht wurden auf der Party "Geburtstag Stefan" und zusätzlich Bilder von Tina auch auf der Party "Geburtstag Stefan". Kategorie 1 ist dabei die Kategorie für Geburtstagsbilder. Jetzt soll der Geburtstag ein Ordner sein, und der der die Bilder gemacht hat ebenfalls.
Die Ordnerstruktur müsste so aussehen
/workdir/pics/kategorie1/geburtstag stefan/peter
/workdir/pics/kategorie1/geburtstag stefan/tina
Die Zuordnung der Bilder zum richtigen Ordner passiert über ein Info File welches mit den Bildern geliefert werden muss. da drin steht dann der komplette Pfad inkl. Bildname.
Beispiel:
pics/kategorie1/geburtstag stefan/peter/bild1.jpb
Jetzt das die Funktion automatisch den Pfad und das Bild erkennen und den Pfad prüfen und ggf. anlegen + das Bild aus dem Upload Verzeichnis in den richtigen Ordner kopieren.
Ich muss da jetzt noch bisl dran basteln aber ich poste das Ergebnis mal wenn ich soweit bin.
EDIT:
Habe jetzt mal die Function gebaut. Allerdings klappt da was nicht mit dem Anlegen der Verzeichnisse und auch das break; falls z.B. das Bild schon existiert bringt nen Fehler von wegen "Fatal error: Cannot break/continue 1 level". Muss mal ne Pause machen. Wenn jemand anderes noch ne Idee hat oder Verbessern möchte nur zu.
|
PHP Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// Funktion zum Kopieren eines Bildes von Quelle nach Ziel
// Übergabewerde: $pic = Bildname
// $picsourcedir = Quellverzeichnis
// $picdir = Zielverzeichnis
// $abspath = Absoluter Pfad zum Arbeitsverzeichnis
function copy_images($pic,$picsourcedir,$picdir,$abspath) {
// Quellverzeichnis angegeben?
if(!isset($picsourcedir)) {
// Quellverzeichnis nicht angegeben -> Fehler + exit
echo "Quellverzeichnis nicht angegeben!";
break;
}
// Wurde das Verzeichnis separat vom Bild übergeben oder mit dem Bild zusammen?
if(!isset($picdir)) {
// Pfad nicht separat übergeben
if(strrpos($pic,"/")) {
// Praf mit Bild zusammen übergeben
$picdir = substr($pic,0,strrpos($pic,"/"));
} else {
// Pfad weder separat noch mit Bild übergeben -> Kein Möglichkeit der Zuordnung
echo "Kopiervorgang nicht möglich!";
break;
}
}
// Wenn Pfad mit Bild übergeben -> Pfad aus Bildname raus trennen
if(strrpos($pic,"/")) {
$pic = substr($pic,(strrpos($pic,"/")+1));
}
// Wenn Pfad mit ../ beginnt dies entfernen
if(preg_match("/^..\/(.*)/i",$picdir)) {
$picdir = substr($picdir,3);
}
// Wenn QuellPfad mit ../ beginnt dies entfernen
if(preg_match("/^..\/(.*)/i",$picsourcedir)) {
$picsourcedir = substr($picsourcedir,3);
}
// Mit absoluten Pfaden arbeiten -> Quellpfad + abspath
$picsourcedir = $abspath.$picsourcedir;
// Mit absoluten Pfaden arbeiten -> Zielpfad + abspath
$picdir = $abspath.$picdir;
// Prüfen ob das Bild auch tatsächlich hoch geladen wurde
if(!file_exists($picsourcedir."/".$pic)) {
// Quelldatei ist nicht vorhanden -> Fehler ausgeben und beenden
echo "Quelldatei nicht vorhanden!";
break;
}
// Angabe über Zielverzeichnis zerlegen
$picdirarray = explode("/",$picdir);
// pro Verzeichnis ebene prüfen ob vorhanden und wenn nicht sofort anlegen
foreach($picdirarray as $value) {
// Verzeichnisebenen Stück für Stück pro Durchlauf aneinander hängen
$builddir = $builddir.$value;
// Prüfen ob die aktuelle Verzeichnisebene existiert
if(!is_dir($builddir)) {
// Verzeichnisebene existiert nicht -> anlegen
mkdir($builddir);
}
}
// Prüfen ob es das Zielbild schon gibt
if(file_exists($picdir."/".$pic)) {
// Bild existiert -> Fehler ausgeben + exit
echo "Bild schon vorhanden!";
break;
}
// Bild von Quelle nach Ziel kopieren und Quelle anschließend löschen
if(copy($picsourcedir."/".$pic,$picdir."/".$pic)) {
unlink($picsourcedir."/".$pic);
echo "Bild ".$pic." von ".$picsourcedir." nach ".$picdir." kopiert und im Quellverzeichnis gelöscht.";
} else {
echo "Fehler beim Kopieren!";
}
}
|