PHP: exif_imagetype () не работает? - PullRequest
0 голосов
/ 11 ноября 2010

У меня есть эта проверка расширения:

$upload_name = "file";
$max_file_size_in_bytes = 8388608;
$extension_whitelist = array("jpg", "gif", "png", "jpeg");

/* checking extensions */
$path_info = pathinfo($_FILES[$upload_name]['name']);
$file_extension = $path_info["extension"];
$is_valid_extension = false;
foreach ($extension_whitelist as $extension) {
    if (strcasecmp($file_extension, $extension) == 0) {
        $is_valid_extension = true;
        break;
    }
}
if (!$is_valid_extension) {
    echo "{";
    echo        "error: 'ext not allowed!'\n";
    echo "}";
    exit(0);
}

А потом я добавил это:

if (exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_GIF 
        OR exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_JPEG 
        OR exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_PNG) {
    echo "{";
    echo        "error: 'This is no photo..'\n";
    echo "}";
    exit(0);
}

Как только я добавил это в функцию загрузки изображений, эта функция перестала работать. Я не получаю никаких ошибок, даже ту, которую я сделал сам "это не фотография", что может быть не так?

Только что проверил с моим хозяином. Они поддерживают функцию exif_imagetype ()

Ответы [ 3 ]

7 голосов
/ 11 ноября 2010

Вот пример использования коммутатора:

switch(exif_imagetype($_FILES[$upload_name]['name'])) {
    case IMAGETYPE_GIF:
    case IMAGETYPE_JPEG:
    case IMAGETYPE_PNG:
        break;
    default:
        echo "{";
        echo        "error: 'This is no photo..'\n";
        echo "}";
        exit(0);
}

Ваш скрипт тоже можно использовать, но вы должны поставить И между условиями:

if (exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_GIF 
        AND exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_JPEG 
        AND exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_PNG) {
    echo "{";
    echo        "error: 'This is no photo..'\n";
    echo "}";
    exit(0);
}
0 голосов
/ 19 октября 2017
if (exif_imagetype($_FILES['image']['tmp_name']) != IMAGETYPE_JPEG 
    AND exif_imagetype($_FILES['image']['tmp_name']) != IMAGETYPE_PNG) 
{
enter code here
}

Вы можете использовать так.Надеюсь, что это будет полезно

0 голосов
/ 10 сентября 2014

Есть лучший, более короткий способ получения типов изображений, который я сейчас использую (не могу быть уверен, что он будет работать, поскольку он не задокументирован в PHP.net, так как image_type_to_mime_type () также может принимать целое число в качестве входных данных ):

function get_image_type( $image_path_or_resource ) {
    $img = getimagesize( $image_path_or_resource );
    if ( !empty( $img[2] ) ) // returns an integer code
        return image_type_to_mime_type( $img[2] );
    return false;
}

echo get_image_type( 'somefile.gif' );
// image/gif
echo get_image_type( 'path/someotherfile.jpg' );
// image/jpeg

$image = get_image_type( 'somefile.gif' );
if ( !empty( $image ) ){
    // fine, let's do some more coding
} else {
   // bad image :(
}
...