У меня есть эта проверка расширения:
$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 ()
Вот пример использования коммутатора:
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); }
Ваш скрипт также можно использовать, но вы должны установить AND между условиями:
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); }
Есть лучший и более короткий способ получить типы изображений, которые я использую в настоящее время (не могу быть уверен, что он будет работать, поскольку он не документирован в 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 :( }
if (exif_imagetype($_FILES['image']['tmp_name']) != IMAGETYPE_JPEG AND exif_imagetype($_FILES['image']['tmp_name']) != IMAGETYPE_PNG) { enter code here }
Вы можете так использовать. Надеюсь, это будет полезно