问题描述
这是我当前的PHP脚本的片段:
// Check if the form was submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Check if file was uploaded without errors
if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
//$allowed = array("PNG" => "image/png");
$allowed = array("jpg" => "image/jpg","jpeg" => "image/jpeg","gif" => "image/gif","png" => "image/png");
$filename = $_FILES["photo"]["name"];
$filetype = $_FILES["photo"]["type"];
$filesize = $_FILES["photo"]["size"];
// Verify file extension
$ext = pathinfo($filename,PATHINFO_EXTENSION);
if(!array_key_exists($ext,$allowed)) die("Error: Choose between .jpg,.jpeg,.gif,.png. Your format is: $ext");
因此,当前允许这些扩展名:.jpg,.png
。当有人添加带有扩展名image.jpg
的图片时,它可以正常工作,但是在尝试保存`image.JPG时,则不起作用。我该如何解决?
解决方法
使用strtolower()
将发送给您的内容转换为小写,例如您要比较的数据。
$ext = strtolower(pathinfo($filename,PATHINFO_EXTENSION));
,
您可以使用array_change_key_case()
将所有大小写转换为小写,然后检查array_key_exists()
中的小写字母。 array_change_key_case()
默认将所有键更改为小写(但也可以通过向第二个参数提供CASE_UPPER
将其更改为大写-默认为CASE_LOWER
)。
这当然意味着,当您将键传递给array_key_exists()
的第一个参数时,键必须小写。通过传递变量,可以使用strtolower()
来确保它是变量。
$ext = pathinfo($filename,PATHINFO_EXTENSION);
if(!array_key_exists(strtolower($ext),$allowed)) die("Error: Choose between .jpg,.jpeg,.gif,.png. Your format is: $ext");