Bilder hochladen und mit PHP weiterverarbeiten

aphaean

Mitglied
Goodafternoon Ladies & Gentlemen,

Ich verwende eine einfache Form um Bilder auf unseren Server hochzuladen - dabei sind mir eine Anzahl von Problemen begegnet.

1. Ich würde die Bilder (Dateitypen auf gif, jpeg und pjpeg beschränkt) gerne umbenennen. Ich habe folgende Variable: $_FILES['imagefile']['name'], wobei der Name der von dem User angegebenem Dateiname ist.

a) Wie ändere ich diesen Namen rein syntaktisch, ohne dass meine Dateiendung (gif, jpg ... usw) verändert wird / flöten geht?

b) Wie weise ich dem Bild einen einzigartigen Namen zu? Vorstellbar wäre zB, dass das erste Bild 1.jpg ... usw heisst. Irgendwie ist mir unklar, wie ich verhindere, dass ich der Datei den gleichen Namen zuweise, wie bereits existente (hochgeladene) Dateien.

2. Ich kontrolliere in dem ganzen Vorgang aus Sicherheitsgründen Dateigrösse und Dateityp - gibt es da noch andere Grössen, die ich berücksichtigen sollte?

Der Code (ohne Abfrage der Dateigrösse):
PHP:
if ($_FILES['imgfile']['type'] == "image/pjpeg" || $_FILES['imgfile']['type'] == "image/gif" )
{ 
copy ($_FILES['imgfile']['tmp_name'], "files/".$_FILES['imgfile']['name']) or die ("Could not copy"); 
}
else 
{ 
echo "error";
}

Wäre für Hinweise sehr dankbar ;)

cheerio,
anna
 
1b.

da gibt es diverse Möglichkeiten, falls man bspw. eingeloggt sein muss, um etwas hochzuladen, könntest du eine Komination aus User-ID und Timestamp nehmen.

Auch die Datei-Prüfsumme([phpf]crc32[/phpf] sollte recht eindeutig sein, hätte auch gleich den Vorteil, dass identische Bilder nicht mehrmals gespeichert werden).

Übrigens: die Prüfung des MIME-Types, wie sie bei dir erfolgt, ist nicht empfehlenswert, allein für JPG gibt es noch einige mehr, die du nicht berücksichtigt hast. Prüfe stattdessen über das 3. Element von [phpf]getimagesize[/phpf], das ist sicherer.
 
Danke für die Antwort Sven!

Zunächst - ich bin blutiger Anfänger und muss zugeben, dass mir auch die Erklärung bei php.net nicht wirklich weiterhilft. Diese Funktion ermittelt also eindeutige Werte aus einer Graphik (in der Erläuterung ist irgendwie nur von Strings die Rede *nichtdurchblick*), unabhängig vom Dateinamen? Und wie sieht die Syntax aus, um den Befehl zu verwenden?

Entschuldige bitte meine Verpeilung ...

anna
 
Zur Prüfung des Dateityps:

Diese "statische" Variation des Codes funktioniert ohne Probleme:

PHP:
$info = getimagesize("bild.gif");
foreach($info as $key => $value) {echo $key . ' - ' . $value . '<br />';}

Sobald ich aber die Variable ersetze:

PHP:
$info = getimagesize($_FILES['imgfile']['name']);
foreach($info as $key => $value) {echo $key . ' - ' . $value . '<br />';}

Bekomme ich diese Fehlermeldung:
Warning: getimagesize(bild.gif): failed to open stream: No such file or directory in ...

Mit Anführungsstrichen gibt es folgende Fehlermeldung:
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in ....

Was mache ich falsch? *verwirrtguck*

anna
 
Zurück