11
votes

Comment trouver l'extension d'une image du chemin dans PHP?

Y a-t-il une fonction standard dans PHP pour ne trouver que l'extension d'une image à partir du chemin de fichier correspondant?

Par exemple, mon chemin d'image est comme "/testdir/dir2/image.gif", la fonction doit alors renvoyer "gif".

merci


0 commentaires

9 Réponses :


52
votes
$ext = pathinfo(
    parse_url('/testdir/dir2/image.gif?foo=bar', PHP_URL_PATH), 
    PATHINFO_EXTENSION
); //$ext will be gif

7 commentaires

J'ai un hello.jpg mais je l'ai renommé à hello.gif et téléchargez-le afin d'obtenir l'extension mais pas le type correct. PEKKA APRAOCH est imo le meilleur


La question initiale demande de trouver l'extension uniquement. Pas de vérification de sécurité ou d'autres besoins.


@DrColossos mais c'est ce que l'op exige - l'extension. Il y a plus de chances de l'OP nécessitant le même code pour une utilisation future que de renommer ses images avec de mauvaises extensions.


Je n'ai pas dit que sa réponse n'est pas correcte, je viens d'essayer d'expliquer une possibilité des bowvotes.


@DRCOLOSSOS: Merci pour votre commentaire, de toute façon, je dois juste que l'extension de fichier n'est pas le type de fichier.


Est-il possible d'obtenir l'extension d'une image stockée à distance à l'aide de la méthode ci-dessus?


Cela n'exclut pas les paramètres de requête.



-2
votes

Fonctions de base de la chaîne, Strrpos () et substr () peut le faire pour vous. Ainsi que de nombreux autres moyens de fantaisie.


8 commentaires

Ceci est une réponse directe à une question où la puissance de l'OP probablement est une vérification de type de fichier approfondi et non seulement pour l'extension. Par votre logique, cela mériterait A -1. Juste dire;);)


@Pekka "Pour ne trouver que l'extension d'une image". Sonne plutôt sans ambiguïté pour moi


@Robus oui. Je ne fais que taquiner @col parce qu'il m'a retrouvé pour des réponses directes à de telles demandes claires lorsque la demande claire était en fait, ce n'est pas ce que l'OP avait vraiment besoin d'atteindre la meilleure solution. Ses commentaires ont toujours été justifiés (je valorisai beaucoup les connaissances et les saisies de Col, la balise PHP en a besoin), mais il est toujours très direct à ce sujet, c'est pourquoi je suis une bite en retour quand il fait la même erreur :) je Voudrais souligner que le Downvote Cette réponse a reçu n'est pas de moi, cependant.


@Pekka J'espère qu'il revient et fessée de vous: P en fait, je ne suis pas sûr de savoir pourquoi cela a été évité, la réponse la plus avancée ne vérifie pas le type réel de retourner. Ils manipulent tous les deux la chaîne plutôt que de vérifier le fichier, donc je ne sais pas pourquoi quelqu'un déteste sur le col.


Prenez-vous facilement avec le colonel de l'obus;)


@Col. Shrapnel: Je peux également utiliser ces fonctions, mais je souhaite utiliser une fonction standard directe comme "pathinfo" au lieu d'écrire ma propre logique à l'aide de fonctions de chaîne.


@Siva Ces fonctions ne sont pas moins standard. Et vous pouvez tout faire en utilisant. La programmation n'est pas comme lego - mettant les blocs prêts à l'emploi ensemble, mais vous devez parfois vous inventer quelque chose. Et si même une telle chose facile vous permet, la programmation n'est probablement pas votre vocation. Les choses comme Pathinfo ne sont pas "standard" mais plutôt appelées "sucre de syntaxe". Et trop de sucre causera le diabète.


@Col. Shrapnel: Je ne dis pas que ces fonctions de chaîne ne sont pas standard. Je connais également la puissance de ces fonctions et comment les utiliser également, mais j'ai commencé ce fil pour connaître toute fonction standard 'directe (simple)' pour obtenir l'extension d'image.



1
votes

comme Col. Shrapnel mentionné; Il y a de nombreuses manières xxx


1 commentaires

Merci, ce code a l'air cool, mais comme je l'ai dit ci-dessus, je veux juste utiliser une fonction standard directe comme 'Pathinfo'.



15
votes

Il est généralement plus souhaitable de détecter l'image réelle type (pas par extension mais par son contenu). Pour cela, utilisez getImagesize () .


1 commentaires

Cela devrait être le bon et. L'extension de nom peut être n'importe quoi.



0
votes

Je vous recommanderais d'exécuter des images téléchargées / liées via une vérification de GD / ImageMagick et de la sauvegarder à nouveau pour éviter les codes malveillants cachés dans les images. Cela vous permettrait également de sauvegarder toutes les images avec la même extension pour vous faciliter la tâche.

http://www.php.net/imagepng
http://www.php.net/imagegif

http://www.php.net/imagejpeg


2 commentaires

C'est une bonne suggestion, même si ce n'est pas lié à la question. Ne mérite pas un bowvote. Cependant, la conversion transversale du JPG en GIF et inversement ne conduira jamais à de bons résultats.


Merci. Je sais que ce n'est pas entièrement lié à la question, même si je pensais s'il est d'accepter des images téléchargées, il est préférable de cracher ce peu d'informations avant que quelque chose de mauvais arrive. Vous pouvez également vérifier l'extension au début, regardez si le résultat donné existe dans une matrice d'extensions autorisées, puis enregistrez-la comme exactement une même extension une fois exécutée dans le chèque GD / ImageMagick. Conservez également une valeur par défaut (disons PNG) si un résultat n'a pas été trouvé.



6
votes

J'ai eu un problème avec la première réponse et l'URL avec ancre ex. Google.com/image.jpg#anchorechedeck, solution P>

$filename_from_url = parse_url($url);
$ext = pathinfo($filename_from_url['path'], PATHINFO_EXTENSION);


0 commentaires

0
votes

Je vous recommanderais de la manière parfaite xxx

pour plus de détails ici la classe SplfileInfo

J'espère que cela vous aidera.

acclamations!

Mudassar Ali


0 commentaires

3
votes

Je pense que la manière la plus correcte consiste à utiliser Echo Exif_imageType fonction:

   exif_imagetype("/testdir/dir2/image.gif");

   function get_image_type($image_path){

        $extension  = array(IMAGETYPE_GIF => "gif",
        IMAGETYPE_JPEG => "jpeg",
        IMAGETYPE_PNG => "png",
        IMAGETYPE_SWF => "swf",
        IMAGETYPE_PSD => "psd",
        IMAGETYPE_BMP => "bmp",
        IMAGETYPE_TIFF_II => "tiff",
        IMAGETYPE_TIFF_MM => "tiff",
        IMAGETYPE_JPC => "jpc",
        IMAGETYPE_JP2 => "jp2",
        IMAGETYPE_JPX => "jpx",
        IMAGETYPE_JB2 => "jb2",
        IMAGETYPE_SWC => "swc",
        IMAGETYPE_IFF => "iff",
        IMAGETYPE_WBMP => "wbmp",
        IMAGETYPE_XBM => "xbm",
        IMAGETYPE_ICO => "ico");

        return $extension[exif_imagetype($image_path)];
}


1 commentaires

De cette façon fonctionne même si l'URL est utilisée pour encoder l'image sur le serveur - bien fait.



1
votes

Je pense que le moyen facile d'utiliser strrpos () et substr () méthodes xxx

plus de réponses pour Autro Question liée à cette question


0 commentaires