Pourquoi est-ce que sur certains fichiers MP3, quand j'appelle mime_content_type ($ mp3_file_path) Il renvoie l'application / octet-flux?
Ceci est mon code: P>
if (!empty($_FILES)) { $tempFile = $_FILES['Filedata']['tmp_name']; $image = getimagesize($tempFile); $mp3_mimes = array('audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio'); if (in_array(mime_content_type($tempFile), $mp3_mimes)) { echo json_encode("mp3"); } elseif ($image['mime']=='image/jpeg') { echo json_encode("jpg"); } else{ echo json_encode("error"); } }
3 Réponses :
Le MP3 Dans ce cas n'est pas un vrai fichier MP3, ni - plus probable - le fichier est un vrai fichier MP3, mais ne contient pas les "octets magiques" La fonction PHP utilise pour reconnaître le format - peut-être parce que c'est un sous-format différent ou a un débit variable ou autre. p>
Vous pouvez essayer si getid3 vous donne de meilleurs résultats. Je n'ai jamais travaillé avec cela, mais cela ressemble à une jolie bibliothèque saine pour obtenir de nombreuses informations à partir de fichiers multimédias. P>
Si vous avez accès à la configuration de PHP, vous pouvez également être en mesure de Modifiez le fichier Application / Octet-Stream code> est probablement
MIME_Content_Type code> S Type de retombe quand il ne parvient pas à reconnaître un fichier. p>
mime.magic code> fichier
PHP utilise, bien que je n'ai aucune idée si un meilleur fichier existe qui est capable de détecter vos mp3. (Le fichier mime.magic code> est le fichier contenant toutes les séquences d'octets que
mime_content_type code> utilise pour reconnaître certains types de fichiers.) P>
J'ai eu une chance de creuser dans getid3 et si je me souviens bien, il s'est avéré qu'il figure que le format de fichiers est uniquement sur des extensions.
Les fichiers MP3 sont une bête étrange lorsqu'il s'agit de les identifier. Vous pouvez avoir un mp3 stocké avec un conteneur .wav. Il peut y avoir une en-tête ID3V2 au début du fichier. Vous pouvez intégrer un mp3 essentiellement dans n'importe quel fichier. P>
Le seul moyen de les détecter de manière fiable est d'analyser lentement dans le fichier et d'essayer de trouver quelque chose qui ressemble à une image MP3. Un cadre est la plus petite unité de données mp3 valides possibles et représente (sortie de mémoire) 0,028 secondes d'audio. La taille du cadre varie en fonction du débit et du débit d'échantillonnage, de sorte que vous ne pouvez pas simplement saisir le débit de débit / échantillon de la première image et supposer que tous les autres cadres seront la même taille - A vbr mp3 doit être analysé dans son intégralité calculer le temps de lecture total. p>
Tout cela revient à cet identifiant un MP3 en utilisant PHP's FileInfo et similaire n'est pas fiable, car les données MP3 réelles peuvent démarrer n'importe où dans un fichier. FileInfo ne regarde que le premier kilobyte ou deux de données, donc s'il est dit que ce n'est pas un MP3, il pourrait très bien être mené, car les données ont commencé légèrement plus loin. P>
Alors, quelle est la solution?
Ajoutez une exception dans votre code / logique qui, lorsque vous constatez une extension de fichier .mp3 code> dans le nom de fichier, saut la détection de type MIME et l'assume à être
audio / mp3 code>. Bien entendu, il s'agit d'un compromis et en fonction du cas d'utilisation (par exemple, si vous souhaitez une fiabilité à 100%, mais une détection plus lente) - Vous voudrez peut-être aller avec l'analyse lentement dans le fichier et essayer de trouver quelque chose qui ressemble à une image mp3 «Approche mentionnée dans la réponse.
Fleep est la réponse à cette question. Autoriser l'application / l'octet-flux est dangereux car .exe et d'autres fichiers dangereux peuvent afficher avec ce type MIME. P>
Voir cette réponse https://stackoverflow.com/a/52570299/14482130 P>
Serait-ce un problème permettant d'autoriser l'application / octet-flux si vous utilisez IS_Executable pour interdire les exécutables avant de permettre certains types?
Je ne connais pas votre situation spécifique, je ne peux donc pas dire à coup sûr. Tout ce que je sais, c'est que permettre la demande d'application / octet sans que les contrôles supplémentaires soient potentiellement un danger énorme car vous n'avez vraiment aucune idée de ce que le fichier est. Cela pourrait littéralement être à peu près n'importe quoi. À mon œil, il vaincit complètement le but de la vérification de Mimetype en premier lieu si vous décidez d'autoriser l'application / le flux d'octet. Je ne sais pas comment est_s_exublicité fonctionne, je ne peux donc pas en garantir. J'ai trouvé que Fleep pouvait constater que c'était un fichier MP3, sans s'appuyer sur l'extension, malgré le mimetype montrant en tant que demande / piste d'octet.
Peut-être montrer du code? Ou quelques exemples de ces fichiers?