悪意のあるファイルタイプや望ましくないファイルタイプを防ぐために、外部/リモートファイル(www.someurl.com/video.aviのようなURLリンク)からMIMEタイプを特定するにはどうすればよいですか?私はcURLを使用する方法があることを読んだが、可能ならばPHPのネイティブソリューションを探したいと思う。あなたはget_headersPHPでリモート/外部ファイルのMIMEタイプを見つける
例を使用することができます
悪意のあるファイルタイプや望ましくないファイルタイプを防ぐために、外部/リモートファイル(www.someurl.com/video.aviのようなURLリンク)からMIMEタイプを特定するにはどうすればよいですか?私はcURLを使用する方法があることを読んだが、可能ならばPHPのネイティブソリューションを探したいと思う。あなたはget_headersPHPでリモート/外部ファイルのMIMEタイプを見つける
例を使用することができます
:
<?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"
}
をあなたは完全なファイルをダウンロードしたくないと仮定すると、リモートサーバーの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をローカルで使用することができます。
これはどれくらい正確でしょうか?ヘッダーを簡単に偽装することはできませんか? – user1307016
関連:[PHP:get_headers set temporary stream_context](http://stackoverflow.com/questions/8429342/php-get-headers-set-temporary-stream-context) – hakre
ヘッダーと同様に、ファイルコンテンツも同様に簡単に処理できます偽装されています。リモートファイルがあなたのコントロール下にないので、あなたはそれらをまったく保護することができないという事実に慣れておくべきでしょう。あなたはそれらに関するいくつかの情報を取得することができます*または*それらをコピーしてあなた自身で "保護された"コピーをホストします。 – hakre