2009-12-12 3 views
1

Я использую Uploadify для загрузки изображения на сервер.
Изображение загружается и помещается во временную папку веб-сервера.Не удалось получить расширение файла изображения

Теперь мне нужно работать с файлом beore сдвинув его к нему реально место, и у меня есть следующий код:

// Get the filepath and filename from server temp dir 
$sourceFile = $_FILES[ 'Filedata' ][ 'tmp_name' ]; // e.g. c:\server\path\tmp\php159.tmp 

// Solution 1 for getting file extension 
$fileExt1  = pathinfo($sourceFile, PATHINFO_EXTENSION); // <-- This only returns .tmp 

// Solution 2 with getimagesize 
list(,,$extension) = getimagesize($sourceFile); 
$fileExt2  = $extension; // this only returns the number 2. 

// Solution 3 with getimagesize 
$img = getimagesize($sourceFile); 
$fileExt3 = $img[2]; // this only returns the number 2. 

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

Есть ли какие-либо претензии?

ответ

2

Ну, во-первых $ Исходный_файл должен быть $_FILES['Filedata']['name'] вместо $_FILES['Filedata']['tmp_name'] но только для первого решения.

Теперь о ваших решений/проблем:

  1. pathinfo($sourceFile, PATHINFO_EXTENSION); // должно работать
  2. getimagesize() возвращает константу, указывающую тип изображения во втором индексе
  3. же, как точка 2

Имейте в виду, что exif_imagetype() возвращает точно такую ​​же информацию, как и второй индекс getimagesize(), если у вас есть доступ к этой функции, она должна работать лучше.

Теперь для постоянных изображений, наиболее распространенные три являются:

  • IMAGETYPE_GIF = 1
  • IMAGETYPE_JPEG = 2
  • IMAGETYPE_PNG = 3

Поверка так просто, как делать что-то например:

switch (exif_imagetype($_FILES['Filedata']['tmp_name'])) 
{ 
    case IMAGETYPE_GIF: 
     echo 'is a GIF'; 
    break; 

    case IMAGETYPE_JPEG: 
     echo 'is a JPEG'; 
    break; 

    case IMAGETYPE_PNG: 
     echo 'is a PNG'; 
    break; 

    case default: 
     echo 'is something else; 
    break; 
} 

Еще одна вещь, лучше использовать getimagesize()/exif_imagetype(), чем полагаться на расширение файла, поскольку расширение можно легко изменить.

+0

А, так вот что значит 2 означает :) Спасибо. – Steven

+0

Я не могу использовать exif_imagetype, по крайней мере, не на своем компьютере. Он не был скомпилирован с моим PHP (я использую v5.x). Я получаю сообщение 'Call undefined function exif_imagetype()'. (см. ссылки в моем комментарии ниже) – Steven

+0

Если вы находитесь в Windows, включите DLL в следующем расширении заказа: php_mbstring.dll extension = php_exif.dll и убедитесь, что мы редактируем правильный файл php.ini. – kta

1

exif_imagetype() может определять количество графических форматов, быстро и даже не использовать GD.

Редактировать: Я вижу, что вы уже используете getimagesize() и не можете переводить константы. На странице exif_imagetype(), связанной выше, есть перевод всех возвращаемых типов изображений, которые должны быть действительны для getimagesize().

+0

Я получаю только вызов 'undefined function exif_imagetype()'. У других есть аналогичные проблемы: http://www.ivorde.ro/PHP_Error_Call_to_undefined_function_exif_imagetype__on_FreeBSD-35.html и http://www.wampserver.com/phorum/read.php?2,34044 – Steven

+0

thanx для информации .... это действительно хорошо. он определяет тип изображения с использованием заголовка изображения (тип MIME), поэтому, даже если в файле GIF есть другое расширение, он обнаружит это изображение как тип изображения GIF –

+0

@Steven, какую версию PHP вы используете. Эта функция предназначена для PHP 4.3.0 и выше. –

2

Ваши решения №2 и №3 работают уже. От the getimagesize() manual page:

Возвращает массив с 7 элементами.
...
Индекс 2 является одной из констант IMAGETYPE_XXX, указывающих тип изображения.

Итак, для .gif это должно быть целое число 2. Чтобы получить расширение файла, используйте image_type_to_extension(), так как вы уже используете библиотеку gd. например.

$img = getimagesize($sourceFile); 
$fileExt = image_type_to_extension($img[2]) 
+0

+1 для изображения_type_to_extension(), однако IMAGETYPE_GIF = 1, а не 2. –

+0

Спасибо, что указали это. – bearver