找到上传文件的扩展名 (PHP)

56

我们可以从$_FILES["file"]["tmp_name"]获取原始文件的扩展名吗?例如,jpg或png等?

4个回答

115
$name = $_FILES["file"]["name"];
$ext = end((explode(".", $name))); # extra () to prevent notice

echo $ext;

1
请记住,文件名扩展名只是实际内容的提示,它可能是完全不同的内容。 - user1610743
3
“@user1610743,一般的规则是不要相信任何用户上传的内容。当然,可以检查文件头并确保与扩展名匹配。例如,图片(JPEG、PNG等)。” - Dejan Marjanović
@Webarto 只是觉得需要添加这个评论,因为这是谷歌搜索的第一个结果..由于不安全的文件扩展名检查,已经有许多易受攻击的网络事物。 - user1610743
@user1610743 我明白,我没有添加那个提示,因为它超出了问题的范围,但既然被接受了,我可能会这样做,希望能防止有人犯错。谢谢。 - Dejan Marjanović
1
让我们让世界变得更加安全一些 :-) - user1610743
不确定在首次发布时是否没有返回通知,但从PHP8开始,它会返回一个通知。这里解释了原因:https://dev59.com/TWQn5IYBdhLWcg3w5aay - tb.

111
您可以使用 pathinfo()
$path_parts = pathinfo($_FILES["file"]["name"]);
$extension = $path_parts['extension'];

21
简化版 - pathinfo($filename, PATHINFO_EXTENSION);翻译:获取文件扩展名。 - fsasvari
1
$ext = pathinfo($_FILES["file"]["name"])['extension']; $ext = pathinfo($_FILES["file"]["name"])['extension']; - bdalina
@JohnBallinger:尊敬的先生,第一个被接受的答案怎么样?那个选项比这个更好吗? - sqlchild
请注意,这并不考虑文件内容,它只看字符串。将您的 image.png 重命名为 image.mp3 而不更改数据不会使您得到 png 作为结果。 - Typewar

1

是的,您可以使用$_FILES['file']['name']来获取上传文件的原始名称。但请记住,扩展名可能并不总是代表文件的真实内容。


我知道我们可以用'name'找到,但我想知道是否可以仅使用tmp_name找到。 - Peter
1
@Peter,tmp_name是由PHP生成的随机文件名。您只能通过查看实际原始名称来执行此操作。 - Charles

1

是的,假设它的命名准确无误。它将保留其原始名称和扩展名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接