PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bild beim Upload komplett umbenennen?


tpax
23.07.2006, 04:04:40
Hallo,
ich habe vor kurzem mit php angefangen und habe mal zu Testzwecken für mich ein kleines Bild-Upload Script geschrieben. Um zu vermeiden, dass es Probleme mit den gleichnamigen Bildern gibt, lasse ich an das Bild eine mit rand generierte Zahl anhängen. Wenn allerdings ein Bild ihrgendwelche Zeichen im Namen hat, gibt es Probleme bei der generierung von Thumbnails.
Da ich noch ein Anfänger bin, was php anbetrifft, bin ich noch nicht im Stande mir einen Filter zu schreiben, welcher diese Zeichen und die Leerzeichen entfernen würde, darum möchte das Bild einfach beim Upload in eine von rand generierte Zahl umbenennen.
Wie könnte ich das realisieren, wie müsste meine Script im Endeffekt aussehen?


Hier ein kleiner Ausschnit, wie es jetzt im Moment beim Upload gemacht wird.

<?
$path = "images/";
$zufall = rand(1,9999);

$res = copy($_FILES['userfile']['tmp_name'],"./".$path.$zufall.$_FILES['userfile']['name']);
?>


Hoffe ihr könnt mir etwas helfen.
Ich hab zwar dannach gegoogelt, aber eine für mich verständliche Antwort konnte ich leider nicht finden. Danke im Vorraus.

MfG
tpax

feuervogel
23.07.2006, 08:50:42
warum speicherst du denn überhaupt den originalnamen mit, lasse ihn doch einfahc weg und hänge an die zufallszahl je nach image-type die passende dateiendung...

ich will ja nicht pingelig sein, aber die wahrscheinlichkeit, dass du beim speichern eines neuen bildes ein altes (gleichnamiges) überschreibst, ist zwar sehr geringt, besteht aber doch noch...wenn du viele benutzer hast von denen vielleicht 1000 ein bild hochladen das heißt "ich.jpg" dann überschreibst sogar ganz sicher ein altes bild mit einem neuen...ich würde also eher die sekunden + mikrosekunden nehmen, die zum zeitpunkt des hochladens aktuell sind, um den namen des bildes zu speichern...oder falls du das ganze in ner datenbank ablegst die id des bildes in der datenbank.

bUTschy
23.07.2006, 13:45:17
hi
warum eine zufallzahl, setze jedem upload einfach den aktuellen timestamp voran.

und statt copy, besser move_uploaded_file (http://de2.php.net/move_uploaded_file) verwenden ;-) der code würde dann in etwas so aussehen:
move_uploaded_file($_FILES['userfile']['tmp_name'],"$path/time();".$_FILES['userfile']['name']);

feuervogel
23.07.2006, 16:22:27
hi
warum eine zufallzahl, setze jedem upload einfach den aktuellen timestamp voran.

und statt copy, besser move_uploaded_file (http://de2.php.net/move_uploaded_file) verwenden ;-) der code würde dann in etwas so aussehen:
move_uploaded_file($_FILES['userfile']['tmp_name'],"$path/time();".$_FILES['userfile']['name']);

nicht ganz...

move_uploaded_file($_FILES[ 'userfile' ][ 'tmp_name' ] , $path . time() . $_FILES[ 'userfile' ][ 'name' ] );

trotzdem gibts da probleme, wenn zwei benutzer in einer sekunde ein bild mit dem gleichen namen hochladen...

tpax
23.07.2006, 17:59:42
Hallo,
danke schonmal für die Antworten.

Wenn ich
move_uploaded_file($_FILES[ 'userfile' ][ 'tmp_name' ] , $path . time() . $_FILES[ 'userfile' ][ 'name' ] );
zum Uploaden benutze, speicher er aber immer noch den Originalnamen des Bildes mit, genau das will ich ja nicht. Ich würde den Originalnamen komplett wegfallen lassen wollen.

Gibt es keine Möglichkeit die Endung (.jpg .png etc) des Bildes abzuspeichern, und diese dann der von time() umbenannten Datei anzuhängen?

MfG
tpax

feuervogel
23.07.2006, 19:07:09
Gibt es keine Möglichkeit die Endung (.jpg .png etc) des Bildes abzuspeichern, und diese dann der von time() umbenannten Datei anzuhängen?

MfG
tpax

ja:

mit mime_content_type() findest du den mime-type heraus. in abhängigkeit von diesem kannst du dann die datei-endung bestimmen.

Andes
23.07.2006, 19:10:20
Du kannst doch bei $_FILES[ 'userfile' ][ 'name' ] alles vor dem Punkt mit deinem Wunschnamen ersetzen und speicherst diesen in eine Variable.

Das könnte so aussehen

$file = "test.jpg";
$name = "123456";
$new_file = $name.substr($file, strrpos($file, ".")); //Dateinamen ab letzten Punkt ausgeben

tpax
23.07.2006, 19:38:14
Du kannst doch bei $_FILES[ 'userfile' ][ 'name' ] alles vor dem Punkt mit deinem Wunschnamen ersetzen und speicherst diesen in eine Variable.

Das könnte so aussehen

$file = "test.jpg";
$name = "123456";
$new_file = $name.substr($file, strrpos($file, ".")); //Dateinamen ab letzten Punkt ausgeben


Es ist genau das, was ich gesucht habe, ich danke dir.

MfG
tpax