Frage

Ich mache eine Seite, wo der Benutzer eine Datei hochladen. Ich möchte eine if-Anweisung eine $ Fehlervariable zu erstellen, wenn der Dateityp etwas anderes jpg ist, gif, und pdf.

Hier ist mein Code:

$file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype

if(/*$file_type is anything other than jpg, gif, or pdf*/) {
  $error_message = 'Only jpg, gif, and pdf files are allowed.';
  $error = 'yes';
}

Ich habe Schwierigkeiten, Strukturierung der if-Anweisung. Wie würde ich das sagen?

War es hilfreich?

Lösung

Setzen Sie die zulässigen Typen in einem Array und verwenden in_array() .

$file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype

$allowed = array("image/jpeg", "image/gif", "application/pdf");
if(!in_array($file_type, $allowed)) {
  $error_message = 'Only jpg, gif, and pdf files are allowed.';
  $error = 'yes';
}

Andere Tipps

Bearbeiten

Ich habe erkannt, dass Sie PDF-Dateien als auch zulassen möchten. In diesem Fall überprüfen PHP Fileinfo-Klasse und Funktionen . Aber so weit wie Sicherheit geht, noch sollten Sie nicht verlassen sich auf $_FILES[]['type']:)

Ich werde den Rest hier in Fall verlassen hilft es jemand anderes, der diese Frage findet


Für den MIME-Typ des Bildes überprüft, könnte $_FILES[]['type'] unsicher sein. Diese Daten werden durch den Browser gesendet und leicht gefälscht werden können.

Sie sollten die getimagesize() Funktion verwenden, wenn Sie nur Bilder zulassen möchten hochgeladen werden (trotz seiner vielleicht irreführend Name). Diese Funktion wird nicht nur Ihnen die Größe, aber alle die Daten, die Sie wahrscheinlich über das Bild benötigen.

Ich habe das folgende Skript in einer Bild Handhabung Klasse:

private function load_image_data($image_file) {

    // Firstly, to disambiguate a loading error with a nonexistant file error,
    // check to see if the file actually exists.
    if( ! file_exists($image_file) ) {
        throw new Nonexistent_Image_Exception("The file '{$image_file}' does not exist");
    }

    // We're going to check the return value of getimagesize, so we don't
    // need any pesky warnings or notices popping up, since we're going to
    // stop execution of this function if something goes wrong.
    $image_data = @getimagesize($image_file);

    if( $image_data === false ) {
        throw new Load_Image_Exception("Could not get image data from '{$image_file}'");
    }

    $this->size = new Dimensions($image_data[0], $image_data[1]);
    $this->mime = $image_data['mime'];

}

Beachten Sie, dass getimagesize() gibt ein assoziatives Array ein 'MIME' Index enthält. Die Daten hier ist zuverlässig.

In einer anderen Funktion überprüfte ich den Mime-Typ des Bildes und konvertiert es in PNG-Dateien mit der entsprechenden GD-Funktion:

private function load_image($image_file) {

    // Suppress warning messages because we're going to throw an
    // exception if it didn't work instead.
    switch( $this->mime ) {
    case 'image/jpeg':
    case 'image/pjpeg':
        $this->image = @imagecreatefromjpeg($image_file);
        break;
    case 'image/gif':
        $this->image = @imagecreatefromgif($image_file);
        break;
    case 'image/png':
        $this->image = @imagecreatefrompng($image_file);
        break;
    default:
        throw new Invalid_Image_Exception("The image was of an invalid type");
    }

    if( $this->image === false ) {
        throw new Load_Image_Exception("Loading of image '{$image_file}' failed");
    }

}

Sie werden wahrscheinlich nicht brauchen, um all dies zu tun, aber man kann sehen, welche Arten mimt erscheinen für die Dateitypen Sie angegeben haben. Beachten Sie, dass ein jpeg zwei verschiedenen MIME-Typen haben könnte.

Hope, das hilft.

Siehe auch Zend Framework 's Zend_File_Transfer_Adapter_Http und Zend_Form_Element_File . Sie können mehrere verschiedene Validatoren wie minimale Bildauflösung, MIME-Typ, minimale Dateigröße, erlaubte Dateierweiterungen hinzufügen, etc.

Mit diesem einfachen Code ...

<?
$path = $_FILES['file']['name']; // file means your input type file name
$ext = pathinfo($path, PATHINFO_EXTENSION);

if ($ext=="jpg" OR $ext=="jpeg" OR $ext=="gif" OR $ext=="png") {
    // your code here like...
    echo "Upload successful";
}else{
    // your invalid code here like...
    echo "Invalid image format. Only upload JPG or JPEG or GIF or PNG";
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top