ここで新しい男が、単純な解決策で何が満たされるべきかという質問をしています。
私はたくさんのコードを試しました。getimagesize のファイル ストリームを取得し、クラッシュすることなく他の機能を動作させることができるようです。
アップロードされるファイルを制限して、画像ファイルのみで悪意がないものにする必要がある古いプロジェクトを払いのけています。
このコードは、何があっても常にエラーメッセージを表示します
$imageinfo = getimagesize($_FILES['bf_file'][$key]['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
alert ("Sorry, we only accept GIF and JPEG images");
exit;
}
これがブラックリストの取り組みです
$blacklist = array(".php", ".phtml", ".php3", ".php4", ".js", ".shtml", ".pl" ,".py"
,".txt", ".doc");
foreach ($blacklist as $file)
{
if(preg_match("/$file\$/i", $_FILES['bf_file'][$key]['tmp_name']))
{
alert "ERROR: Uploading executable files Not Allowed\n";
exit();
}
}
ここに別のgetimagesizeがあります
$size = getimagesize($_FILES[bf_file][$key][tmp_name]);
$fp = fopen($_FILES[bf_file][$key][tmp_name], "rb");
if ($size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp);
continue;
} else
// error
alert("Inappropriate file type");
これらのそれぞれで、ファイルがアップロードされているかどうかに関係なく、エラー メッセージが表示されます。
これらのコントロールをファイルのどこかに配置するだけで、アップロードされたファイルがチェックに合格した場合、すべてがアップローダーとして通過し、他のすべてが正常に機能しますが、これらのリミッターとチェックの利点はありません.
また、ユーザーがファイルをアップロードする必要はありません。件名、本文、ファイルのアップロードの 3 つのフィールドがあります。件名と本文のみがデータを持つ必要があり、それは現在機能しています。
どんな助けでも大歓迎です。
ありがとう、
ジェームズ