views:

310

answers:

1

I'm writing an object in PHP that displays files on an FTP server. I am using PHP's built in FTP functions to retrieve most of the details I need (filename, size, last modified, etc.). However, there are no functions to get the mime-type of a file on the server. I have tried two different methods that work, but I'm having some issues.

Using fileinfo as follows takes 34 seconds to get the mime types of 10 files:

$finfo = new finfo(FILEINFO_MIME);
$mime_type = $finfo->file('ftp://username:password@host/path/file');

Using mime_content_type() to do the same thing only takes 6 seconds:

$mime_type = mime_content_type('ftp://username:password@host/path/file');

There are two issues here that I am looking for some help with. The first is security. Using either method transmits the login credentials plain text (of course FTP is insecure by nature, but this just makes it worse). The second issue is more of a best practice. Obviously mime_content_type() is the best of these two methods because it performs so much better, but it's deprecated. Is there a better, and potentially more secure, way of doing this? I can't install anything on the FTP server as this is intended to be used on anybodies FTP server that wishes to use it, so using a web service is out of the question.

Thanks in advance, ~ James Armes

+3  A: 

The reason for the delay is that you need to read the magic byte of each file and use your server's magic file to determine what type is it.

So you are opening a transfer in FTP and reading that info, which isn't that fast in FTP.

Ólafur Waage
But why is there such a difference between mime_content_type() and fileinfo? They are both going through FTP.
JamesArmes
FileInfo is programmed in a much better way. As stated in the documentation of mime_content_type(). > This function has been deprecated as the PECL extension Fileinfo provides the same functionality (and more) in a much cleaner way.
Ólafur Waage
While I agree, I can't afford this performance loss. Is there a middle ground (ie. something that performs better than fileinfo but isn't deprecated)?
JamesArmes