php上传图片没有文件名后缀

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php上传图片没有文件名后缀相关的知识,希望对你有一定的参考价值。

if(move_uploaded_file($_FILES['img']['tmp_name'],DOCUMENTROOT."/uploads/img/".time().$FILES['img']['name']))
用这句上传文件时,上传到服务器的文件没有后缀名,正常情况下$FILES['img']['name']这个包含的文件名应该有后缀名才对

$filename = basename($_FILES[\'image\'][\'name\']);
$file_ext = strtolower(substr($filename, strrpos($filename, \'.\') + 1));
echo $file_ext;

请楼主先试试用这几句看是否能获取到后缀名
一般来说,即使系统没有显示后缀名,在php上传中也是可以获取到后缀名的
还有,就是要检查一下,move_uploaded_file函数里,目标地址的图片名称是否拼接了后缀名追问

$_FILES["file"]["name"]这个的文件名应该是全部文件名,为什么我的代码获取的却不包含后缀名,上传的那张图片是有后缀名的

参考技术A $_FILES["file"]["type"] 这个才是文件类型
$_FILES["file"]["name"] 这个是文件名追问

$_FILES["file"]["name"]这个的文件名应该是全部文件名,包括后缀吧

追答

是的!

来自:求助得到的回答
参考技术A 会不会是你电脑文件夹设置里面把后缀名给屏蔽了 参考技术B 楼主解决了没有,我也遇到这种问题了 参考技术C 这个明显是你电脑设置的问题吧?

PHP 怎么下载没有后缀的图片

比如优酷网的缩略图,没有后缀,php下载它怎么写

保存比较简单,使用 file_get_contents 和 file_put_contents ,比较麻烦(应该是没想到)的是如何获取图片类型,这个可以通过响应头来判断,响应头有一个属性 Content-Type ,它就是 mime ,做好 mime 和 文件扩展名的映射,就可以知道文件的扩展名了。下面这个函数可以做个参考:


/*
 * 保存图片
 * @param $url 要保存的链接
 * @return 保存的字节数,失败则返回 false
 */
function saveFile($url)

    // mime 和 扩展名 的映射
    $mimes=array(
        'image/bmp'=>'bmp',
        'image/gif'=>'gif',
        'image/jpeg'=>'jpg',
        'image/png'=>'png',
    );
    // 获取响应头
    if(($headers=get_headers($url, 1))!==false)
    
        // 获取响应的类型
        $type=$headers['Content-Type'];
        // 如果符合我们要的类型
        if(isset($mimes[$type]))
        
            $fileName=uniqid();
            $ext=$mimes[$type];
            $file="temp/$fileName.$ext";
            // 获取数据并保存
            $contents=file_get_contents($url);
            return file_put_contents($file, $contents);
         
    
    return false;

参考技术A 用CURL...

以上是关于php上传图片没有文件名后缀的主要内容,如果未能解决你的问题,请参考以下文章

文件上传漏洞

在上传到Wordpress时,给所有图片添加 "图片-"后缀。

php表单上传图片到七牛云存储并返回地址……求具体流程~有代码更好

php过滤上传类型,只上传图片类型文件

挖洞姿势:特殊的上传技巧,绕过PHP图片转换实现远程代码执行(RCE)

phpweb提示:只能上传jpg、png、gif格式的文件