Sorry, Flüchtigkeitsfehler...
Ich habe jetzt das in
PHP-Code:
if (!emtpy($_POST['gesendet']))
geändert. Aber generell keine Veränderung. Ich bleibe immer noch an der ersten Whitelist hängen, und da muss es doch "empty" anstatt "!empty" heißen, da er ja nur eine Meldung geben soll, wenn $_FILES NICHT gefüllt, also leer sind, oder?
Also: Wenn leer, dann Meldung...
Und trotzdem geht das Script immer in die Schleife...
NACHTRAG: Ich bin jetzt zumindest soweit, dass ich das Gefühl habe, dass es am $endung im Pregmatch liegt. Gebe ich dort direkt ".jpg" ein, dann funzt es. Das Script lässt sich z.B. auch nicht mit einer bild.jpg.php "überrumpeln" - es wird immer nur nach der Endung geschaut. Wenn ich aber wieder $endung (welche richtig gefüllt sind - durch Testausgabe geprüft) funktioniert es wieder nicht...
Zudem habe ich gelesen, dass empty() Probleme bei Variablen mit einer 0 machen kann, da es dort dann auch eine leere Variable angibt und man deswegen eher isset verwenden soll...was ist da drann?
Auch bei der Überprüfung des Mime-Types hakt es anscheinend wieder an der if-Abfrage. Die Variablen werden anscheinend richtig übermittelt, denn mit einer
Prüfabfrage von
PHP-Code:
echo 'Type: ' . $mime_type_client_bild . '<br />';
echo 'Bild Vorschau: ' . $mime_type_client_bild_vorschau . '<br />';
echo 'Type: ' . $mime_type_server_bild . '<br />';
echo 'Bild Vorschau: ' . $mime_type_server_bild_vorschau . '<br />';
wird
Zitat:
Type: image/jpeg
Bild Vorschau: image/jpeg
Type: image/jpeg; charset=binary
Bild Vorschau: image/jpeg; charset=binary
|
ausgegeben.
Die Zuteilung scheint zu funzen. Wenn ich jetzt die if-Abfrage nur auf den Client ($mime_type_client_...), beschränke, dann funzt das wunderbar, aber wenn ich es mit dem Server ($mime_type_server_...) versuche, wird der Type anscheinend nicht richtig erkannt...
NACHTRAG: AUch das Problem konnte ich mittlerweile "lösen": Durch
PHP-Code:
$whitelist_content_type = array('image/jpeg', 'image/jpeg; charset=binary');
Wurde anscheinend auch $mime_type_server... überprüft. Es scheint als wenn doch nicht nur nach image/jpeg gesucht wurde.
Aber kann man das so machen? Wenn ja, dann stimmt etwas in dem Script nicht woran ich mich orientiert habe...
Das Script sieht zumindest jetzt so aus:
PHP-Code:
// Prüfen ob Formular gesendet
if (!empty($_POST['gesendet']))
{
for ($i=0; $i < 1; $i++)
{
//Prüfen ob Dateien ausgewählt wurden
if(empty($_FILES["bild_serie"]["name"][$i]) ||
empty($_FILES["bild_serie_vorschau"]["name"][$i]) ||
($_FILES["bild_serie"]["name"][$i] === '') ||
($_FILES["bild_serie_vorschau"]["name"][$i] === ''))
{
$_SESSION["rueckgabe"] = "Es wurde keine Datei gewählt";
header("Location:
http://xxx/admin_bilder_serie.php?aktion=1&id=" . $_POST["id"] . "");
exit;
}
// Prüfen ob Endung erlaubt
// Whitelist Endung
$whitelist_endung = array('.jpg', '.jpeg');
foreach($whitelist_endung as $endung)
{
if((!preg_match("/.jpg\$/i", $_FILES['bild_serie']['name'][$i]))
|| (!preg_match("/.jpg\$/i", $_FILES['bild_serie_vorschau']['name'][$i])))
{
$_SESSION["rueckgabe"] = "Es wurde ein falscher Dateityp gewählt.
Bitte nur .jpg verwenden 1";
header("Location:
http://xxx/admin_bilder_serie.php?aktion=1&id=" . $_POST["id"] . "");
exit;
}
}
// Prüfung Content-Type
//Whitelist Content-Type
$whitelist_content_type = array('image/jpeg', 'image/jpeg; charset=binary');
$mime_type_client_bild = $_FILES["bild_serie"]["type"][$i];
$mime_type_client_bild_vorschau = $_FILES["bild_serie_vorschau"]["type"][$i];
$finfo_bild = new finfo(FILEINFO_MIME);
$mime_type_server_bild = $finfo_bild->file($_FILES["bild_serie"]["tmp_name"][$i]);
$finfo_bild_vorschau = new finfo(FILEINFO_MIME);
$mime_type_server_bild_vorschau = $finfo_bild_vorschau->file($_FILES["bild_serie_vorschau"]["tmp_name"][$i]);
if(!in_array($mime_type_client_bild, $whitelist_content_type) ||
!in_array($mime_type_client_bild_vorschau, $whitelist_content_type) ||
!in_array($mime_type_server_bild, $whitelist_content_type) ||
!in_array($mime_type_server_bild_vorschau, $whitelist_content_type))
{
$_SESSION["rueckgabe"] = "Es wurde ein falscher Dateityp gewählt.
Bitte nur .jpg verwenden 2";
header("Location:
http:/xxx/admin_bilder_serie.php?aktion=1&id=" . $_POST["id"] . "");
exit;
}
// Prüfen ob Bild richtige Größe besitzt
if(getimagesize($_FILES["bild_serie"]["tmp_name"][$i]) ||
getimagesize($_FILES["bild_serie_vorschau"]["tmp_name"][$i]))
{
$image_size_bild = getimagesize($_FILES["bild_serie"]["tmp_name"][$i]);
$image_size_bild_vorschau = getimagesize($_FILES["bild_serie_vorschau"]["tmp_name"][$i]);
if(($image_size_bild[0] != 640) || ($image_size_bild[1] != 480) ||
($image_size_bild_vorschau[0] != 160) || ($image_size_bild_vorschau[1] != 120))
{
$_SESSION["rueckgabe"] = "Die größe stimmt nicht überein oder es wurde
ein falscher Datentyp gewählt";
header("Location:
http://xxx/admin_bilder_serie.php?aktion=1&id=" . $_POST["id"] . "");
exit;
}
}
echo '<p>Test bestanden</p>';
}
}
else
{
echo '<p>es wurde kein Formular gesendet</p>';
}