2012-05-08 17 views
1

悪意のあるファイルタイプや望ましくないファイルタイプを防ぐために、外部/リモートファイル(www.someurl.com/video.aviのようなURLリンク)からMIMEタイプを特定するにはどうすればよいですか?私はcURLを使用する方法があることを読んだが、可能ならばPHPのネイティブソリューションを探したいと思う。あなたはget_headersPHPでリモート/外部ファイルのMIMEタイプを見つける

例を使用することができます

答えて

10

<?php 

$headers = get_headers('http://website.com/image.png'); 
var_dump($headers); 

?> 

出力:

array(8) { 
    [0]=> 
    string(15) "HTTP/1.1 200 OK" 
    [1]=> 
    string(35) "Date: Tue, 08 May 2012 07:56:54 GMT" 
    [2]=> 
    string(14) "Server: Apache" 
    [3]=> 
    string(44) "Last-Modified: Sun, 06 May 2012 23:09:55 GMT" 
    [4]=> 
    string(20) "Accept-Ranges: bytes" 
    [5]=> 
    string(22) "Content-Length: 707723" 
    [6]=> 
    string(17) "Connection: close" 
    [7]=> 
    string(23) "Content-Type: image/png" 
} 
+1

これはどれくらい正確でしょうか?ヘッダーを簡単に偽装することはできませんか? – user1307016

+0

関連:[PHP:get_headers set temporary stream_context](http://stackoverflow.com/questions/8429342/php-get-headers-set-temporary-stream-context) – hakre

+0

ヘッダーと同様に、ファイルコンテンツも同様に簡単に処理できます偽装されています。リモートファイルがあなたのコントロール下にないので、あなたはそれらをまったく保護することができないという事実に慣れておくべきでしょう。あなたはそれらに関するいくつかの情報を取得することができます*または*それらをコピーしてあなた自身で "保護された"コピーをホストします。 – hakre

1

をあなたは完全なファイルをダウンロードしたくないと仮定すると、リモートサーバーのMIMEタイプを確認することができます:

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_exec($ch); 
return curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 

またはカールの場合は、完全なファイル(一般的にはパフォーマンスに悪い)をダウンロードしてから、mime_content_typeまたはfinfo_fileをローカルで使用することができます。

関連する問題