gutefrage.net, die Ratgeber Community
Login   |  Registrieren   |  Forum |  Richtlinien & FAQ


PHP Frage Ordner anlegen?

gefragt von moppelitomoppelito am 29.10.2009 um 14:33 Uhr

Hi Leutz, ich hab jetzt ne stunde im I-Net geuscht und leute gefragt, doch die konnten mir keine richtige antwort geben... Hier meine Frage: wie kann ich in php bei einem upload scrip für jede neu hochgelade datei einen ordner erstellen in den die datei gescpeichert wir!d! ausser dem soll der ordner eine zahl sein also ordner 1 hat den namen: 1 ordner 2 den namen 2... ich konnte das herausfinden: $a = //hier kommt der befehl da der letzte ordner +1 genommen wird $new_path = mkdir ( '$a', 0700 );

wie mache ich das? Danke im vorraus moppelito^^

PS: ich will auf meinem.www.moppelito.tk das wenn man dort etwas hochläd nicht das direct in den "uploads" ordner getan wird um das überschrieben von daten verhindern.


Weitere Fragen zu verwandten Themen finden Sie hier:

Computer (70984)
HTML (955)
PHP (444)
ähnliche Fragen
Frage beantworten


anonym
beantwortet von ProPhiL am 29. Oktober 2009 14:35
0x
Die Antwort ist hilfreich? Dann klick mich!

mkdir( $a, 0700) wenn dann, denn entweder variable oder anführungszeichen.

da du nicht weisst was der letzte Ordner für eine Zahl hatte, musst du das verzeichnis sortiert durchsuchen (loop über read_dir) und am ende hat er ja das verzeichnis mit der höchsten Zahl. diese dann plus eins..

Kommentar von 8a9a18046705ddcfa07e13c59ba1d181smallmoppelito am 29. Oktober 2009 14:41

kannsnt du mir das genauer beschreiben? bin grad am anfang von php^^ wie setzte ich dieses read_dir nach dem verzwichnis mit der höchsten zahl?


Lioxen
beantwortet von Lioxen am 29. Oktober 2009 16:28
0x
Die Antwort ist hilfreich? Dann klick mich!

wenn es Dir wirklich nur darum geht, das keine Datei überschrieben wird, warum hängst Du dann nicht einfach eine Zahl an die Datei an. z.B. wenn es bild.gif schon gibt, heißt die neue Datei bild1.gif und wenn es die schon gibt bild2.gif usw. Hier mal ein Codeschnippsel der das leistet:

$uploaddir='/httproot/upload/'; //Verzeichnis für Upload
$filename=$_FILES['userfile']['name']; //Name der Datei, wie sie hochgeladen wurde

$ftype=strrchr($file,'.'); //Dateiende wie z.B. .gif, .jpg usw.
$fname=substr($file,0,strlen($file)-strlen($ftype)); //der Name der Datei ohne Endung

//solange die Datei existiert wird ein Counter hochgezählt und an den Dateinamen angehangen. $a=0;
while(fileexists($uploaddir.$filename)){
$a++;
$filename=$fname.'
'.$a.$ftype;
}

//hier hast Du den Namen unter dem Du die Datei speichern kannst
echo $filename;

Kommentar von 4ff310923419b126aec46b119d02eb0dsmallLioxen am 29. Oktober 2009 16:35

ups der hat sämtliche Unterstriche gelöscht, sollte eigentlich heissen:
$filename=$fname.'unterstrich'.$a.$ftype; aber Du kannst es auch weglassen, dann hängt er nur die Zahl an:
$filename=$fname.$a.$ftype;

Kommentar von 8a9a18046705ddcfa07e13c59ba1d181smallmoppelito am 29. Oktober 2009 17:00

Problem: wenn ich nach einer gweissen daei suche komme durcheinander mit ordnern wäre das einfacher, kann ich: $a++ $new_path = mkdir ( $a, 0700 );

????

Kommentar von 4ff310923419b126aec46b119d02eb0dsmallLioxen am 29. Oktober 2009 18:20

Da musst Du erst mal rausfinden, welche Zahl das letzte erstellte Verzeichnis überhaupt hat. Das könnte man auch in einer while Schleife abfragen. z.B.
$a=1;
while(file_exists($uploaddir.$a)){
$a++;
}
if(mkdir($uploaddir.$a)){
//weiter im Code
}
else{
echo 'Fehler beim Anlegen des Verzeichnisses';
}

das hat aber den Nachteil, dass je mehr Verzeichnisse schon angelegt sind um so länger braucht die Schleife. Außerdem wird das Probleme machen, wenn zufälligerweise mehrere Personen eine Datei hochladen wollen.
Genauso könnte man mit readdir das upload Verzeichnis auslesen. Da man da aber auch Dateien zurückbekommt und das Ergebnis nicht geordnet bekommt, muss man das im Nachhinein tun. Auch hier sehe ich aber ein Problem, wenn mehrere User zur gleichen Zeit eine Datei hochladen wollen. Bleibt eigentlich nur, die Zahl in einer Datei zu speichern und beim lesen ein exclusive Lock zu legen. D.h. es kann nur eine Instanz auf die Datei zu einer bestimmten Zeit zugreifen. Alle anderen müssen warten. z.B. so
$fp = fopen("./ordnerzahl.txt", "r+");

if (flock($fp, LOCKEX)) { // ein exclusive lock
while (!feof($fp)) {
$line=trim(fgets($fp, 1024));
} ftruncate($fp, 0); // kürzt die Datei auf 0 rewind($fp); //Dateizeiger auf den Anfang $newid=(int)$line+1;
fputs($fp,$newid); //schreibt die neue Zahl in die Datei mkdir($upload.$line); //hier der ganze kram um die Datei zu verschieben also
move
uploadedfile(...);
flock($fp, LOCK
UN); // entfernt den Lock }
else {
echo "Konnte kein Lock erhalten!";
}

Dann musst Du noch eine Datei ordnerzahl.txt in dem Ordner anlegen wo das Script liegt und dort eine 1 reinschreiben. Hinweis: die löschen immer die Unterstriche hier: das heißt LOCKunterstrichEX und LOCKunterstrichUN

Kommentar von 8a9a18046705ddcfa07e13c59ba1d181smallmoppelito am 30. Oktober 2009 18:30

was ist beid dir der uploaddir<??? ordner odeer hochgeladene datei^^

Kommentar von 4ff310923419b126aec46b119d02eb0dsmallLioxen am 2. November 2009 09:39

das ist eine Variable, die ich am Anfangs selbst vergeben habe(siehe ganz oben), da ich Deine Verzeichnisstruktur nicht kenne. Diese speichert den Pfad zu dem Verzeichnis in der alle hochgeladenen Dateien oder auch Ordner angelegt werden sollen.



Noch nicht die richtige Antwort? Dann hier in allen Fragen und Tipps suchen:




Verwandte Fragen

Verwandte Fragen

    Frage zum Thema Computer:

    Frage an die Computer Profis

    Wie kann ich selber auf meinem Server/Webspace Ordner anlegen ?



Mehr verwandte Fragen

Verwandte Fragen
Die unter gutefrage.net angebotenen Dienste und Ratgeber Inhalte werden nicht geprüft. Die Richtigkeit der Inhalte wird nicht gewährleistet. Bitte lesen Sie hierzu auch unsere Rechtlichen Hinweise.