You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Saturday, January 21st 2006, 11:37am

Verzeichnis anlegen, Datei aus einem Ordner in anderen kopieren und anschließend die Quelle löschen

Ich stehe glaub ich grade etwas auf der Leitung oder so.

Ich habe folgende Struktur

/workdir/dir1 <--- Quellverzeichnis

/workdir/dir2 <--- Zielverzeichnis für neues Verzeichnis

/workdir/dir2/subdir1 <--- Zielverzeichnis für Datei

Ich möchte jetzt das mein Skript das Verzeichnis "subdir1" anlegt, eine vorgegebene Datei aus /workdir/dir1 nach /workdir/dir2/subdir1 kopiert und wenn das geklappt hat die Quelldatei gelöscht wird.

Mein Code

PHP Source code

1
2
3
4
                chdir("dir2");
                mkdir("subdir1");
                chdir("..");
                if(copy("dir1/".$itempicfile,"dir2/subdir1/".$itempicfile)) unlink("dir1/".$itempicfile);

In der Variable $itempicfile steht der Dateiname meiner Datei. Beim Aufruf stehe ich im Verzeichnis /workdir und rufe das Skript dann auf.
Der meckert dann aber und sagt

Quoted

Warning: mkdir(): No such file or directory

Irgendwie versteh ich den Fehler glaub ich falsch, denn wie kann das Directory existieren, wenn ich grade dabei bis es anzulegen?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

2

Saturday, January 21st 2006, 1:01pm

Gib den Pfad in mkdir mal absolut an.

Ciao Ephraim

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

3

Saturday, January 21st 2006, 3:17pm

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!";
    }
}
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

wcf.user.socialbookmarks.titel