Hello,
ich sehe schon, das ist der falsche Weg.
Super das glob wars, aber jetzt hab ich noch ein Problem das vorher auftritt.
wenn ich abspeicher, will ich den Namen ändern, aber nicht die Endung.
also aus xxxxxxxxx.zip soll 100.zip, bzw. aus xxxxxxxxxxxxx.doc soll 100.doc werden
if( is_uploaded_file ( $_FILES['userfile_doc']['tmp_name'] ) )
{$endung <---
move_uploaded_file($_FILES['userfile_doc']['tmp_name'], 'verzeichnis/100.'.$endnung);
}wie bekommt die var $endung die endnung $_FILES['userfile_doc']['tmp_name']
Unabhängig davon, dass noch die alte Geschichte mit "is_uploded_file()" offen ist...
das ist mMn antiquiert, seit es $_FILES gibt,
sollte man
if ($_FILES['uploadname'][$error] === 0) fragen.
wenn ein (1) File als Upload erwartet wird.
Zum Übertragen der Datei aus dem hoffentlich für jede Domain getrennt angelegten upload_tmp_dir http://de3.php.net/manual/en/ini.core.php#ini.upload-tmp-dir
sollte man die Datei nicht mit move_uploaded_file() verschieben (ebenfalls antiquiert), da es keinerlei Rücksicht auf das Vorhandensein des Zieles nimmt.
Besser
Quellfile öffnen
Quellfile sperren (shared reicht)
Zielfile öffnen mit Arrtibut (xb), wenn man nachher sofort lesen will mit (xb+)
Wenn das schief geht, war das File schon da und man muss eben mit anderem Namen
nochmal probieren. (*)
Zielfile sperren (exclusive)
Daten aus dem Quellfile ins Zielfile übertragen
Beide Files wieder schließen.
Das TMP-File verschwindet beim Scriptende automatisch, obwohl es _keine__echte__Temporärdatei ist. Das übernimmt abe PHP.
http://de3.php.net/manual/en/function.fopen.php
Du schaffst Du sonst an ein bis zwei Stellen ein TOCTTOU-Problem.
https://de.wikipedia.org/wiki/Time-of-Check-to-Time-of-Use-Problem
(*) noch ein Tipp zur Güte:
Vermutlich benutzt Du ja eine Datenbank, um deine Daten zu verwalten. Wenn Du nun jeder Datei einen Datensatz in einer Tabelle mit Primary-Key zuordnest, in dem der Eigentümer, Upload-Datum, Größe, der MIME-Type, die Endung, usw. gespeichert werden, dann kannst Du die abgelegte Datei im Dateisystem einfach "$id.$extension" nennen und alles wird gut.
Den MIME-Type entnimmst Du bitte nicht dem $_FILES-Array, sondern bestimmst ihn mit der Funktion:
function get_mime_type($path)
{
$_version = explode('.',phpversion());
if (($_version[0] < 5) or (($_version[0] == 5) and ($_version[1] < 3))) return false;
if (!function_exists('finfo_open')) return false;
if (!$finfo = finfo\_open(FILEINFO\_MIME\_TYPE)) return false;
$mime\_type = finfo\_file($finfo, $path);
finfo\_close($finfo);
return $mime\_type;
}
siehe auch im SelfHTMT-Wiki unter "Fileupload". Das Wiki steht aber im Moment.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg