2
$filename=$_FILES['file']['name'];
$type=$_FILES['file']['type'];
$extension=strtolower(substr($filename, strpos($filename, '.')+1));
$size=$_FILES['file']['size'];


if(($extension=='jpg' || $extension=='jpeg') && ($type!='image/jpg' || $type!='image/jpeg')){...

我有一个输入文件,只能让用户上传 jpg/jpeg 图像,我有检查类型、扩展名、大小。

  1. 但是我不确定如何检查用户是否更改扩展名。(例如 abc.php -> abc.jpg)

  2. 在将用户的图像保存到我的服务器之前,我还需要检查什么?

4

3 回答 3

3

您可以检查图像exif_imagetype()

http://www.php.net/manual/en/function.exif-imagetype.php

exif_imagetype() 读取图像的第一个字节并检查其签名。

于 2013-08-07T14:56:01.663 回答
2

我建议使用 finfo:

<?php
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    foreach (glob("*") as $filename) {
        echo finfo_file($finfo, $filename) . "\n";
    }
    finfo_close($finfo);

    /* outputs:
    text/html
    image/gif
    application/vnd.ms-excel
    */
?>

示例取自 php 文档站点。在 php 文档页面http://www.php.net/manual/en/function.finfo-file.php上查看更多信息

于 2013-08-07T14:56:20.617 回答
0

@Fabian 的答案看起来很适合检查文件的类型。虽然我会建议一种不同的方法来获取文件的扩展名。

考虑一个名为stack.overflow.jpg.

$filename = 'stack.overflow.jpg';

// With your code $extension = 'overflow.jpg'
$extension=strtolower( substr( $filename, strpos( $filename, '.' ) +1 ) );

// With pathinfo() $extension = 'jpg'
$extension = pathinfo( $filename, PATHINFO_EXTENSION );

考虑使用pathinfo()获取文件扩展名:http ://www.php.net/manual/en/function.pathinfo.php

于 2013-08-07T15:15:25.847 回答