(この質問への回答から:.rar, .zip files MIME Type)ほとんどの人が PHP で zip ファイルをapplication/zip
orとしてチェックすることを知っていますapplication/octet-stream
が、これについていくつか質問があります。
- チェックするだけで安全ですか
application/octet-stream
(application/octet-stream
zipだけでなく、より多くのファイルタイプを説明するために使用できることを考えると!)。他の方法でもファイルをチェックできることはわかっていますが、すべてをできるだけシンプルに保つように努めるべきだと考えました - できるだけ多くの異なる実際の zip タイプを確認しようとしました。しかし、予期しない結果をもたらすものもあります。mime-type が である 1 を見つけましたが
application/x-external-editor
、PHP はそれを処理するのに問題があります (唯一のエラーは ですがWarning: ZipArchive::close() [ziparchive.close]: Invalid or unitialized Zip object
) - これはどこかに文書化されていますか?x-
PHP が対応できる実際の MIME タイプのリストはありますか?
編集
以下の質問に答えます。
- を使用して MIME タイプをチェックしています
$_FILES['fileatt']['type']
が、 を使用しmime_content_type()
ても同じ結果が得られます。異なる zip ファイルは、次のいずれかのようです:'application/zip'
、'application/x-compressed'
、'application/x-zip-compressed'
、。MIME タイプが であると検出されたときにエラーが発生した理由がわかりませんでした。'application/x-compressed'
'multipart/x-zip'
application/x-external-editor
- zip 拡張機能がインストールされており、アップロード時に zip ファイルからすべてのファイルを抽出しています。エラーを確認することは考えていませんでした。
また、よくわからない別のことも発見しました。PHPが次のように読み取るファイルで次のコードを使用するとapplication/x-external-editor
:
if($zip->open($_FILES[fileatt]['tmp_name'])===TRUE)
{
echo "success";
} else {
echo "error";
}
「エラー」を出力しますが、ファイルタイプを次のようにチェックします
$res = $zip->open($_FILES[fileatt]['tmp_name']);
if($res)
{
echo "success";
} else {
echo "error";
}
「成功」を出力します。このコードでは、ブール値は==
ではなくを効果的に使用していると想定しています===
が、なぜこれが違いを生むのでしょうか?
エラー:
$res = $zip->open($_FILES[fileatt]['tmp_name']);
if($res===TRUE)
{
echo "success";
} else {
echo $res;
}
印刷19
- どのエラー ( http://uk3.php.net/manual/en/ziparchive.open.php ) が 19 を参照していますか?!