PHP文件格式上传

问题描述

这是我当前的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");

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...