[解決済み] .rar、.zip ファイル MIME タイプ
2022-03-05 20:31:47
質問
シンプルなPHPアップロードスクリプトを開発していますが、ユーザーがアップロードできるのはZIPとRARファイルのみです。
どのようなMIMEタイプでチェックすればよいのでしょうか?
$_FILES[x][type]
? (完全なリストをお願いします)
解決方法は?
freedompeaceさん、Kiyarashさん、Sam Vloeberghsさんからの回答です。
.rar application/x-rar-compressed, application/octet-stream
.zip application/zip, application/octet-stream, application/x-zip-compressed, multipart/x-zip
私なら、ファイル名のチェックもします。ここでは、そのファイルがRARファイルかZIPファイルかをチェックする方法を紹介します。簡単なコマンドラインアプリケーションを作成してテストしてみました。
<?php
if (isRarOrZip($argv[1])) {
echo 'It is probably a RAR or ZIP file.';
} else {
echo 'It is probably not a RAR or ZIP file.';
}
function isRarOrZip($file) {
// get the first 7 bytes
$bytes = file_get_contents($file, FALSE, NULL, 0, 7);
$ext = strtolower(substr($file, - 4));
// RAR magic number: Rar!\x1A\x07\x00
// http://en.wikipedia.org/wiki/RAR
if ($ext == '.rar' and bin2hex($bytes) == '526172211a0700') {
return TRUE;
}
// ZIP magic number: none, though PK\003\004, PK\005\006 (empty archive),
// or PK\007\008 (spanned archive) are common.
// http://en.wikipedia.org/wiki/ZIP_(file_format)
if ($ext == '.zip' and substr($bytes, 0, 2) == 'PK') {
return TRUE;
}
return FALSE;
}
それでも100%確実とは言えませんが、おそらく十分でしょう。
$ rar.exe l somefile.zip
somefile.zip is not RAR archive
しかし、WinRARでもRAR以外のファイルはSFXアーカイブとして検出されます。
$ rar.exe l somefile.srr
SFX Volume somefile.srr
関連
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み] .docx、.pptxなどの正しいMIMEタイプは何ですか?
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] "お知らせ 未定義変数"、"Notice: Notice: 未定義のインデックス", "Notice:未定義のインデックス", "Notice."。PHPを使用した「未定義のオフセット
-
[解決済み] php.iniはどこにありますか?
-
[解決済み] 基本的な「ロングポーリング」の実装方法を教えてください。
-
[解決済み】PHPパスワードのハッシュとソルトの安全性について
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み] .mp4 の正しい MIME タイプ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】ディレクトリ内のファイル数を数える PHP
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] SSLエラー SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました。
-
[解決済み] mysql_field_nameを新しいmysqliに変更します。
-
[解決済み] PHP 未定義関数への呼び出し