Problem mit preg_match
Malte
- php
Hi,
dieses Script soll überprüfen, ob die Datei die hochgeladen wurde ein gif oder ein jpg ist. Wenn nicht wird eine Fehlermeldung ausgeben.
Aber selbst, wenn ich gifs oder jpgs hochlade wird eine Fehlermeldung ausgeben:
// Der Ordner, in den die Bilder hochgeladen werden sollen
$bilder_ordner = "bilder/";
$title = $_POST['title'];
$datei = $_POST['datei'];
$type = $_POST['type'];
if($type == '0')
{
header ("Location: new_pics.php?choose=1");
exit;
}
if(!preg_match("/.+\.(jpeg|jpg|gif)$/i",$datei))
{
header ("Location: new_pics.php?format=1");
exit;
}
else
{
// In den Bilderordner verschieben
move_uploaded_file($_FILES["datei"]["tmp_name"], $bilder_ordner .$_FILES["datei"]["name"]);
// Wo ist die Datei jetzt? -> Pfad ausgeben
header ("Location: new_pics.php?fertig=1");
}
Hi,
dieses Script soll überprüfen, ob die Datei die hochgeladen wurde ein gif oder ein jpg ist.
das erfährst Du am _Inhalt_ der Datei, nicht daran, dass der Benutzer seinen Virus schnell mal umbenannt hat.
header ("Location: new_pics.php?choose=1");
Das ist ungültiges HTTP. Der Location-Header *muss* *zwingend* eine *absolute* URL enthalten.
Cheatah
Hi,
dieses Script soll überprüfen, ob die Datei die hochgeladen wurde ein gif oder ein jpg ist.
das erfährst Du am _Inhalt_ der Datei, nicht daran, dass der Benutzer seinen Virus schnell mal umbenannt hat.
und wie kann ich das machen? ich habe noch nie mit sowas gearbeitet?
Hi!
dieses Script soll überprüfen, ob die Datei die hochgeladen wurde ein gif oder ein jpg ist.
das erfährst Du am _Inhalt_ der Datei, nicht daran, dass der Benutzer seinen Virus schnell mal umbenannt hat.
und wie kann ich das machen? ich habe noch nie mit sowas gearbeitet?
Du brauchst eine Funktion, die anhand des Dateiinhalts den sog. Mime-Content-Type der Datei herausfindet. Dabei werden die ersten Bytes mit einer Liste von verschiedenen, für eine Dateiart typische Byte-Sequenzen, die sich in einer Datei names magic.mime (oder ähnlich, je nach System) befinden, verglichen und damit der Mime-Content-Type genau festgestellt.
Für PHP wäre ein solche Funktion mime_content_type(). Leider ist diese nicht auf jedem System vorhanden, da PHP mit dieser Unterstützung kompiliert werden muss.
Grüße,
Fabian St.
Hallo Malte,
dieses Script soll überprüfen, ob die Datei die hochgeladen wurde ein gif oder ein jpg ist.
das erfährst Du am _Inhalt_ der Datei, nicht daran, dass der Benutzer seinen Virus schnell mal umbenannt hat.
und wie kann ich das machen? ich habe noch nie mit sowas gearbeitet?
ein RTFM soll da ungemein helfen.
Grüße aus Nürnberg
Tobias
der eigentlich script sieht so aus:
<?php
// Der Ordner, in den die Bilder hochgeladen werden sollen
$bilder_ordner = "avatars/";
// Deine Domain
$url = "http://www.deine-domain.tld/";
// Dateiname leer?
if($_FILES["datei"]["name"] == "")
{
echo "Bitte Pfad angeben!";
exit;
}
// Temporärer Dateiname leer?
if($_FILES["datei"]["tmp_name"] == "")
{
echo "Übertragungsfehler!";
exit;
}
// Leere Datei?
if($_FILES["datei"]["size"] == 0)
{
echo "Leere Datei!";
exit;
}
// Datei größer als 10000 Byte?
if($_FILES["datei"]["size"] > 10000)
{
echo "Die Datei ist zu groß.";
exit;
}
// jpg oder gif Datei?
if($_FILES["datei"]["type"] != "image/gif" AND $_FILES["datei"]["type"] != "image/jpg")
{
echo "Es ist nur der Upload von GIF- oder JPG Dateien gestattet.";
exit;
}
// In den Bilderordner verschieben
move_uploaded_file($_FILES["datei"]["tmp_name"], $bilder_ordner .$_FILES["datei"]["name"]);
// Wo ist die Datei jetzt? -> Pfad ausgeben
echo "Die Datei " .$_FILES["datei"]["name"] ." wurde übertragen. Pfad: " .$url .$bilder_ordner .$_FILES["datei"]["name"] .".";
?>
mein zweiter versuch:
if($_FILES["datei"]["type"] != "image/gif" AND $_FILES["datei"]["type"] != "image/jpg" AND $_FILES["datei"]["type"] != "image/pgif" AND $_FILES["datei"]["type"] != "image/pjpg")
{
echo "Es ist nur der Upload von GIF- oder JPG Dateien gestattet.";
exit;
}?>
und das ist mein dritter versuch:
// jpg oder gif Datei?
$mime = $_FILES["datei"]["type"];
if($mime == "image/jpeg" || $mime == "image/gif" || $mime == "image/jpg")
{
// In den Bilderordner verschieben
move_uploaded_file($_FILES["datei"]["tmp_name"], $bilder_ordner .$_FILES["datei"]["name"]);
// Wo ist die Datei jetzt? -> Pfad ausgeben
header ("Location: new_pics.php?fertig=1");
}
else
{
header ("Location: new_pics.php?format=1");
exit;
}
?>
Aber irgendwie klappt alles nicht so recht
Hallo Malte,
if($_FILES["datei"]["type"] != "image/gif" AND $_FILES["datei"]["type"] != "image/jpg")
[ ] du hast verstanden, was du da machst.
[x] du möchtest dir das Kapitel über Logische Operatoren nochmal(?) anschauen.
if($_FILES["datei"]["type"] != "image/gif" AND $_FILES["datei"]["type"] != "image/jpg" AND $_FILES["datei"]["type"] != "image/pgif" AND $_FILES["datei"]["type"] != "image/pjpg")
dito.
$mime = $_FILES["datei"]["type"];
was steht jetzt in $mime?
if($mime == "image/jpeg" || $mime == "image/gif" || $mime == "image/jpg")
Auf das was in $_FILES["datei"]["type"] steht, kannst du dich auch nicht verlassen (es kommt auch vom User, ist also potentiell böse - außerdem können da mehrere verschiedene Werte kommen, die du evtl. dann nicht im Script berücksichtigt hast). Verwende die von mir genannte Funktion.
header ("Location: new_pics.php?fertig=1");
was genau hast du an dem Hinweis von Cheatah bezüglich eines Location-Headers nicht verstanden?
Aber irgendwie klappt alles nicht so recht
Nein, natürlich nicht. Irgendeinen Code ins Forum kippen und hoffen, dass jemand das fertige Script postet klappt eben nicht - oder was meintest du sonst mit "klappt nicht"?
Grüße aus Nürnberg
Tobias