通过接收文件流来上传文件,请问如何准确判断文件后缀

这是网上看到的通过识别文件信息来区分

<?php
$data = file_get_contents('php://input');
$strInfo = @unpack("C2chars", substr($data,0,2));
$typeCode = intval($strInfo["chars1"].$strInfo["chars2"]);
$fileTypes = array(
  7790 => "exe",
  7784 => "midi",
  8075 => "zip",
  8297 => "rar",
  225216 => "jpg",
  7173 => "gif",
  6677 => "bmp",
  13780 => "png",
);
$fileType = isset($fileTypes[$typeCode]) ? $fileTypes[$typeCode] : "unknown";
echo "type : {$fileType} code : {$fileType}";

?>

上传的文件是xlsx文件识别出来的$typeCode 和zip 文件的$typeCode 是一样的,都是8075。这样我在保存文件的时候给文件后缀名就不知怎么去区分这个文件到底是什么后缀了。

勿以恶小而为之,勿以善小而不为
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10
fatrbaby
$mime = mime_content_type('your-file-path');

$extension = match($mime) {
...
};

rename('your-file-path', 'your-file-path.' . $extension);
1年前 评论
xiaochong0302

你可以使用一个偷懒的做法,把流写入临时文件,再用上面提到的方法读取信息,再把临时文件删除

1年前 评论
jiangjun

xlsx文件其实就是zip压缩包,这种不用文件流接收呢,或者前端把文件名传上来

1年前 评论

pathinfo() 可以获取文件信息,如 pathinfo("1.php")

1年前 评论
钟海彬 (楼主) 1年前

模拟php的正常上传,先存临时文件,读取使用后再删除

1年前 评论

我的判断是否为表格

if (!str_contains($file->getClientOriginalName(), 'xlsx') && !str_contains($file->getClientOriginalName(), 'xls')) {
            return response()->json(['code' => 500, 'message' => '请选择正确的文件类型,目前仅支持 xlsx 和 xls 类型文件']);
        }
1年前 评论
mouyong

github.com/mouyong/php-support/blo... 这两个函数能帮到你

1年前 评论
钟海彬 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!