Как получить расширение файла в PHP? [Дубликат]

348

Возможный дубликат:
Как извлечь расширение файла в PHP?

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

$userfile_name = $_FILES['image']['name'];
$userfile_extn = explode(".", strtolower($_FILES['image']['name']));

Есть ли способ получить само расширение?

Теги:
file-extension

5 ответов

958
Лучший ответ

Не нужно использовать строковые функции. Вы можете использовать что-то, что действительно предназначено для того, что вы хотите: pathinfo():

$path = $_FILES['image']['name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);
  • 0
    $ path = $ _FILES ['image'] ['name'] [0]; фактическое имя файла находится в массиве. Pathinfo будет оценивать только строку.
  • 10
    @ foureight84: Это только в том случае, если у вас есть загружаемые поля с именем image[] ...
Показать ещё 3 комментария
43

Это также будет работать:

$array = explode('.', $_FILES['image']['name']);
$extension = end($array);
  • 19
    «Только переменные должны передаваться по ссылке», руководство по PHP
  • 1
    Это не очень хороший подход, так как end функция предназначена для перемещения внутреннего указателя массива в конец массива и возврата этого элемента. Проблема в том, что массив передается по ссылке, и поскольку ваш массив генерируется динамически, он не может быть передан по ссылке, отсюда предупреждение или сбой, в зависимости от вашей версии PHP.
Показать ещё 2 комментария
26

Лучшим методом является использование strrpos + substr (быстрее, чем взрыв для этого):

$userfile_name = $_FILES['image']['name'];
$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1);

Но, чтобы проверить тип файла, использование mime_content_type является лучшим способом: http://www.php.net/manual/en/function.mime-content-type.php

  • 4
    Лучше, чем pathinfo() ? Я так не думаю.
  • 2
    Лучше, чем взорваться ;-). Но, вы правы, pathinfo - лучший способ, когда он включен (некоторые взаимные серверы отключают эту функцию ...).
Показать ещё 5 комментариев
21

Вы можете попробовать с этим типом mime

$image = getimagesize($_FILES['image']['tmp_name']);

$image['mime'] вернет тип mime.

Эта функция не требует библиотеки GD. Вы можете найти документацию здесь.

Это возвращает тип mime изображения.

Некоторые люди используют $_FILES["file"]["type"], но не надежны, как указано браузером, а не PHP.

Вы можете использовать pathinfo(), поскольку ThiefMaster предложил извлечь расширение изображения.

Сначала убедитесь, что изображение загружается успешно во время разработки, прежде чем выполнять какие-либо операции с изображением.

12

Как насчет

$ext = array_pop($userfile_extn);
  • 3
    Я не рекомендую это. Вы полагаетесь на порядок массива, равный тем же годам с этого момента. Это ленивое решение, которое, скорее всего, вызовет проблемы в будущем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню