2009-05-28 8 views
0

J'écris un objet en PHP qui affiche les fichiers sur un serveur FTP. J'utilise les fonctions FTP intégrées de PHP pour récupérer la plupart des détails dont j'ai besoin (nom de fichier, taille, dernière modification, etc.). Cependant, il n'y a pas de fonctions pour obtenir le type mime d'un fichier sur le serveur. J'ai essayé deux méthodes différentes qui fonctionnent, mais j'ai quelques problèmes.Obtenir MIME-Types sur FTP en PHP

En utilisant fileinfo comme suit prend 34 secondes pour obtenir les types MIME de 10 fichiers:

$finfo = new finfo(FILEINFO_MIME); 
$mime_type = $finfo->file('ftp://username:[email protected]/path/file'); 

En utilisant mime_content_type() pour faire la même chose que prend 6 secondes:

$mime_type = mime_content_type('ftp://username:[email protected]/path/file'); 

Il y a deux problèmes ici avec lesquels je cherche de l'aide. Le premier est la sécurité. L'utilisation de l'une ou l'autre méthode transmet les informations de connexion en texte brut (bien sûr, FTP n'est pas sûr par nature, mais cela ne fait qu'empirer les choses). La deuxième question est davantage une meilleure pratique. Évidemment, mime_content_type() est la meilleure de ces deux méthodes car elle fonctionne beaucoup mieux, mais elle est déconseillée. Existe-t-il une meilleure façon, potentiellement plus sûre, de le faire? Je ne peux pas installer quoi que ce soit sur le serveur FTP car il est destiné à être utilisé sur n'importe quel serveur FTP qui souhaite l'utiliser, donc l'utilisation d'un service web est hors de question.

Merci à l'avance, ~ James Armes

+0

Est-il vraiment nécessaire d'obtenir le type MIME? Dans la plupart des cas, il suffit de regarder l'extension du fichier. Ce n'est pas tout aussi fiable bien sûr, mais vous pouvez toujours faire une vérification de type MIME lorsque vous effectuez un traitement réel. –

+0

Je veux obtenir le vrai type mime. Tout le monde peut changer une image bitmap pour avoir une extension jpeg, mais c'est toujours une image bitmap. L'extension de fichier est également facultative. Alors que Windows ne sait pas comment ouvrir un fichier sans extension, Linux le fait très bien (pas sûr de Mac). – JamesArmes

Répondre

3

La raison de ce retard est que vous avez besoin de lire l'octet magique de chaque fichier et utiliser le fichier magique de votre serveur pour déterminer quel type est-il.

Vous ouvrez un transfert FTP et lisez ces informations, ce qui n'est pas si rapide dans FTP.

+0

Mais pourquoi existe-t-il une telle différence entre mime_content_type() et fileinfo? Ils passent tous deux par FTP. – JamesArmes

+0

FileInfo est programmé d'une manière bien meilleure. Comme indiqué dans la documentation de mime_content_type(). > Cette fonction a été abandonnée car l'extension PECL Fileinfo fournit la même fonctionnalité (et plus) d'une manière beaucoup plus propre. –

+0

Bien que je suis d'accord, je ne peux pas me permettre cette perte de performance. Y a-t-il un terrain d'entente (c'est-à-dire quelque chose qui fonctionne mieux que fileinfo mais n'est pas obsolète)? – JamesArmes

Questions connexes