Comment puis-je autoriser que certains types de fichiers sur le téléchargement en php?

StackOverflow https://stackoverflow.com/questions/2486329

  •  21-09-2019
  •  | 
  •  

Question

Je fais une page où l'utilisateur télécharger un fichier. Je veux une instruction if pour créer une variable d'erreur $ si le type de fichier est autre chose jpg, gif et PDF.

Voici mon 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';
}

Je vais avoir du mal structurer l'instruction if. Comment pourrais-je dire cela?

Était-ce utile?

La solution

Mettre les types autorisés dans un tableau et utiliser 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';
}

Autres conseils

modifier

Je viens de réaliser que vous souhaitez autoriser les fichiers PDF ainsi. Dans ce cas, consultez classe Fileinfo de PHP et les fonctions . Mais dans la mesure où la sécurité va, vous devriez toujours pas compter sur $_FILES[]['type']:)

Je vais laisser le reste ici au cas où il aide quelqu'un d'autre qui trouve cette question


Pour vérifier le type MIME de l'image, $_FILES[]['type'] pourrait être dangereux. Ces données sont envoyées par le navigateur et pourrait être facilement usurpée.

Vous devez utiliser la fonction getimagesize() si vous ne souhaitez que pour permettre des images à télécharger (malgré son nom trompeur peut-être). Cette fonction ne sera pas seulement vous donner la taille, mais toutes les données que vous aurez probablement besoin de l'image.

J'ai utilisé le script suivant dans une classe de traitement d'image:

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'];

}

Notez que getimagesize() retourne un tableau associatif contenant un index « mime ». Les données ici sont fiables.

Dans une autre fonction que j'ai vérifié le type MIME de l'image et l'a converti en PNG avec la fonction GD appropriée:

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");
    }

}

Vous aurez probablement pas besoin de faire tout cela, mais vous pouvez voir quels types MIME apparaissent pour les types de fichiers que vous avez spécifiés. Notez qu'un jpeg pourrait avoir deux différents types MIME.

Hope this helps.

Voir aussi Zend Framework Zend_File_Transfer_Adapter_Http Zend_Form_Element_File . Vous pouvez ajouter plusieurs validateurs différents comme la résolution d'image minimum, type MIME, la taille de fichier minimale, les extensions de fichiers autorisés, etc.

Utilisez ce code simple ...

<?
$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";
}
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top