我有代码:
$acceptFormat = array(
'jpg' => 'image/jpeg',
'jpg' => 'image/jpg',
'png' => 'image/png'
);
if ($ext != "jpg" && $ext != "jpeg" && $ext != "png") {
throw new RuntimeException('Invalid file format.');
}
$mime = mime_content_type($_FILES['file']['tmp_name'][$i]);
if ($mime != "image/jpeg" && $mime != "image/jpg" && $mime != "image/png") {
throw new RuntimeException('Invalid mime format.');
}
我有一个
$acceptFormat
数组,其中包含允许的文件格式和两个 ify:
if ($ mime! = "Image / jpeg" && $ mime! = "Image / jpg" && $ mime! = "Image / png")
if ($ ext! = "Jpg" && $ ext! = "Jpeg" && $ ext! = "Png")
如果要基于acceptFormat数组检查扩展名和mime类型,是否可以以某种方式修改它?
尝试使用
in_array()
、array_keys()
表示文件 扩展名,使用 array_values()
表示 mime 值。让我们看看,
<?php
$acceptFormat = array(
'jpg' => 'image/jpeg',
'jpg' => 'image/jpg',
'png' => 'image/png'
);
$ext ='jpg'; // demo value
if (!in_array($ext,array_keys($acceptFormat))) {
throw new RuntimeException('Invalid file format.');
}
$mime = 'video/mkv'; // demo value
if (!in_array($mime,array_values($acceptFormat))) {
throw new RuntimeException('Invalid mime format.');
}
?>
$filename = "path.ext";
$acceptFormat = array(
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpg',
'png' => 'image/png'
);
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if(! array_key_exists($ext, $acceptFormat)) throw new RuntimeException('Invalid file format.');
$mime = mime_content_type($_FILES['file']['tmp_name'][$i]);
if(! in_array($mime, $acceptFormat)) throw new RuntimeException('Invalid mime format.');
您需要 array_key_exists 来搜索键。当然,您需要 pathinfo 来获取扩展名。
接下来,您需要 in_array 搜索 mime 类型的值。
这应该有效。
$acceptFormat = array(
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpg',
'png' => 'image/png'
);
$isValid = false;
foreach ($acceptFormat as $extension => $mimeType) {
if ($ext === $extension && $mime === $mimeType) {
$isValid = true;
break;
}
}
if (!$isValid) {
throw new RuntimeException('Invalid extension/mime type.');
}
// All is good..