0

PHPを使用してユーザーがアップロードしたファイルを提供しようとしています。

ファイルを指すのは簡単ですが、セキュリティ上のリスクが生じるため、サイト上のディレクトリを直接指すべきではないという合意があるようです...誰かが悪意のあるファイルをサイトの障壁を越えて取得する可能性がある場合、サーバー上のどこにあるかを知っていれば、それを実行するのは簡単です。代わりに、サイトのツリー構造外のフォルダーにファイルを配置し、名前を元の名前以外の名前としてデータベースに保存し、隠しディレクトリへのファイルパスを指定して、読み取りと表示を行うPHPファイルを使用して提供することをお勧めします。 。私はこれをすべて行うことができ、以下を使用してぎこちない表示を行うことができます。

// get mime type somehow//

header("Content-type:".$mimetype);
readfile($totalfilepath);

問題は、正しいmimeタイプを取得して、ぎこちないファイルではなく素敵なファイルを表示する方法です。

5.3を使用している場合は、次のようにfinfoを使用できます。

$finfo = finfo_open(FILEINFO_MIME_TYPE);
header("Content-Type: ".finfo_file($finfo, 'files/'.$file));
finfo_close($finfo);
readfile('files/'.$file);  

残念ながら、finfoは5.2では機能しません。という関数もあります

mime_content_type

ただし、4.xxで非推奨になり、どのような場合でもサーバー上にありません。私が読んだことから、5.3より前のmimeタイプを取得するための信頼できる方法はないようです。非常に大規模なサイトのアップグレードが必要になるため、5.3にアップグレードしたくありません。

注:アップロードが許可されているファイルには、.jpg、.gif、.png、.pdfファイル、主要なオフィスファイル、ドキュメント、ドキュメント、xls、xlxなど、およびtxtファイルが含まれます。

また、ブラウザに表示するのではなく、ファイルのダウンロードを強制することもできますが、最初の選択肢はブラウザに表示することです。

4

1 に答える 1

0

必要な情報はgetimagesize()関数によって返されます。この情報を取得する方法は、PHPマニュアルで説明されています。このimage_type_to_mime_type()機能も役立ちます。はオンラインマニュアルにも記載されています。

于 2012-12-30T15:27:42.383 に答える