Php выделить расширение файла

Как получить (извлечь) расширение файла в PHP?

Люди из других языков сценариев всегда думают, что их лучше, потому что у них есть встроенная функция, а не PHP (я сейчас смотрю на Pythonistas :-)).

На самом деле, оно существует, но мало кто это знает. Познакомьтесь с pathinfo() :

$ext = pathinfo($filename, PATHINFO_EXTENSION); 

Это быстро и встроенно. pathinfo() может дать вам другую информацию, такую как канонический путь, в зависимости от константы, которую вы передаете ей.

Помните, что если вы хотите иметь возможность работать с не ASCII-символами, вам нужно сначала установить локаль. НАПРИМЕР:

Также обратите внимание, что это не учитывает содержимое файла или mime-тип, вы получаете только расширение. Но это то, что вы просили.

Наконец, обратите внимание, что это работает только для пути к файлу, а не для пути к ресурсам URL, который покрывается с помощью PARSE_URL.

Я хотел бы проголосовать за это дважды. Я не могу сказать вам, сколько кода я смог заменить, используя pathinfo

@khizaransari Вы должны искать другого хостинг-провайдера, тот, который вы получили, глупый. На самом деле, я имею в виду это. Нет никаких причин отключать эту функцию. Скажи им это. В качестве обходного пути: function get_ext($fname) < return substr($fname, strrpos($fname, ".") + 1); >Убедитесь, что файл имеет расширение, но он может делать что угодно, когда вы передаете путь в качестве аргумента!

Читайте также:  Все редакторы html кода

мое представление о PHP по сравнению с python полностью изменилось теперь, когда я знаю об этой функции: O

@ e-удовлетворительно, но в моем приложении он не работает ни по одному сценарию. Например, иногда я получаю URL в следующем формате: www.domain.com/image.php?id=123&idlocation=987&number=01 для загрузки изображений с этого У uRL нет имени или расширения изображения, которое pathifo () не может предоставить нам расширение изображения. ТАК, что должно быть сделано, пожалуйста! Помоги мне

Это действительно несправедливо, что я не тратил впустую столько, сколько некоторые другие люди здесь, и вместо этого нашел этот ответ и быстро решил мою проблему.

Это НЕ безопасное решение. Если кто-то загрузит вашу конечную точку без использования браузера, он может подделать расширение. Например: pathinfo (‘image.jpg.spoofed’, PATHINFO_EXTENSION) возвращает «подделанный» !! Он не проверяет фактическое тело файла, поскольку не принимает путь к файлу, и не проверяет его результат с помощью карты MimeType. Вы должны убедиться, что значение, которое вы получаете от этого, на самом деле является допустимым типом, запросив iana.org/assignments/media-types/media-types.txt или проверив вашу собственную карту MimeType.

$path_info = pathinfo('/foo/bar/baz.bill'); echo $path_info['extension']; // "bill" 

Это даже работает на этом уровне (Twitter json): $ ext = pathinfo ($ result-> extended_entities-> media [0] -> video_info-> Варианты [1] -> URL, PATHINFO_EXTENSION);

URL-адрес примера: http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ

Забудьте уязвимого PATHINFO !

$x = pathinfo($url); $x['dirname'] ? 'http://example.com/myfolder' $x['basename'] ? 'sympony.mp3?a=1&b=2#XYZ' //  

Используйте более безопасный PARSE_URL:

$x = parse_url($url); $x['scheme'] ? 'http' $x['host'] ? 'example.com' $x['path'] ? '/myfolder/sympony.mp3' $x['query'] ? 'aa=1&bb=2' $x['fragment']? 'XYZ' 

Примечание: хештеги недоступны на стороне сервера, только если они добавлены вручную.

Для всех собственных примеров PHP см.: Получить полный URL в PHP

Этот ответ охватывает все, например. такой файл, как foo_folder/foo-file.jpg?1345838509 потерпит неудачу с помощью только pathinfo , спасибо

$file = new SplFileInfo($path); $ext = $file->getExtension(); 

Часто вы можете написать лучший код, если вы передаете такой объект вместо строки, тогда ваш код будет более разговорным. Поскольку PHP 5.4 это однострочный:

$ext = (new SplFileInfo($path))->getExtension(); 

@matthias: учтите, что SPL можно отключить в версиях PHP, предшествующих версии PHP 5.3.0. Если вы все еще не используете PHP 5.3, но 5.2 или ниже, этот ответ, скорее всего, не подходит для стабильного кода. В противном случае вы можете стабилизировать свой код, требуя конкретной версии PHP, и в противном случае выручите.

@hakre Хотя вы правы, говоря, что «его можно отключить в версиях, предшествующих 5.3.0», расширение SPL, тем не менее, компилируется по умолчанию в PHP 5.0.0. Так что этот комментарий действительно имеет смысл для людей, которые вынуждены использовать PHP 5.2 или ниже и не хотят уходить в отставку, используя определенные классы SPL.

$ext = pathinfo($file, PATHINFO_EXTENSION) или $ext = pathinfo($file)['extension'] являются лучшими однострочниками.

Ответ E-satis - это правильный способ определения расширения файла.

В качестве альтернативы вместо использования расширения файлов вы можете использовать fileinfo (http://us2.php.net/fileinfo), чтобы определить тип файлов MIME.

Здесь приведен упрощенный пример обработки изображения, загруженного пользователем:

// Code assumes necessary extensions are installed and a successful file upload has already occurred // Create a FileInfo object $finfo = new FileInfo(null, '/path/to/magic/file'); // Determine the MIME type of the uploaded file switch ($finfo->file($_FILES['image']['tmp_name'], FILEINFO_MIME)) < case 'image/jpg': $im = imagecreatefromjpeg($_FILES['image']['tmp_name']); break; case 'image/png': $im = imagecreatefrompng($_FILES['image']['tmp_name']); break; case 'image/gif': $im = imagecreatefromgif($_FILES['image']['tmp_name']); break; >

Это единственный правильный ответ. Я не понимаю, почему люди проголосовали за других. Да, этот подход требует больше усилий от разработчика, но он повышает производительность (хотя и мало, но это так). Пожалуйста, обратитесь это .

@Bhavik: В некоторых случаях нам может понадобиться только расширение файла, они о проверке MIME-типа. Но фактический вопрос касается расширения файла, а не типа файла. Так что это НЕ лучший ответ на этот вопрос. (пока ответ)

1) Если вы используете (PHP 5 >= 5.3.6) вы можете использовать SplFileInfo:: getExtension - Получает расширение файла

getExtension()); $info = new SplFileInfo('test.tar.gz'); var_dump($info->getExtension()); ?> 

2) Другой способ получения расширения, если вы используете (PHP 4 >= 4.0.3, PHP 5), PathInfo

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

Где $fname - это имя файла, например: my_picture.jpg И результатом будет: jpg

Это лучший способ, когда вам нужно реальное расширение и имя файла может иметь несколько символов. Например, загруженные пользователем фотографии в моем случае.

Это не удастся, если имя файла не имеет расширения. Попробуйте передать «myfile», и он вернет «myfile». Правильное возвращаемое значение - пустая строка как расширение в этом случае использования.

Это неправильно в том, что array_pop () выдаст уведомление, потому что в качестве параметра он принимает указатель.

Иногда полезно не использовать pathinfo($path, PATHINFO_EXTENSION) , например:

$path = '/path/to/file.tar.gz'; echo ltrim(strstr($path, '.'), '.'); // tar.gz echo pathinfo($path, PATHINFO_EXTENSION); // gz 

Также обратите внимание, что pathinfo не может обрабатывать некоторые символы, отличные от ASCII (обычно это просто подавляет их из вывода), в расширениях, которые обычно не являются проблемой, но не мешает осознавать эту оговорку.

@ e-sat: Согласно Википедии, они являются двумя расширениями: UNIX-подобные файловые системы используют другую модель без разделенных метаданных расширения. Точечный символ - это просто еще один символ в главном имени файла, и имена файлов могут иметь несколько расширений, обычно представляющих вложенные преобразования, такие как files.tar.gz .

Это не удастся, так как /root/my.folder/my.css ltrim(strrchr($PATH, '.'),'.') Работает как pathinfo, но без использования токенов.

Самый простой способ получить расширение файла в php - использовать встроенную функцию php pathinfo.

$file_ext = pathinfo('your_file_name_here', PATHINFO_EXTENSION); echo ($file_ext); // the out should be extension of file eg:-png, gif, html 

Быстрое исправление будет примерно таким.

 //exploding the file based on . operator $file_ext = explode('.',$filename); //count taken (if more than one . exist; files like abc.fff.2013.pdf $file_ext_count=count($file_ext); //minus 1 to make the offset correct $cnt=$file_ext_count-1; // the variable will have a value pdf as per the sample file name mentioned above. $file_extension= $file_ext[$cnt]; 

Почему бы просто не использовать встроенную функцию php для php.net/manual/en/function.pathinfo.php вместо длинного кода

Помимо точки зрения Шахбаза, вы также можете просто сделать $file_ext = end(explode('.', $filename)); сделать все в этом ответе в одной строке вместо четырех.

@ Амелия Что если у тебя есть .tar.gz . Это не будет работать, поэтому, если вам нужно использовать расширение, например ltrim(strstr($filename, '.'), '.'); вместо того, чтобы некорректно получить полное расширение как gz .

substr($path, strrpos($path, '.') + 1); 

Это должно работать правильно: substr ($ path, strrpos ($ path, '.') + 1); Примечание: этот метод быстрее, чем любые другие решения выше. Попробуйте эталонный тест, используя наш собственный скрипт.

вы также можете попробовать это (работа над php 5. * и 7)

$info = new SplFileInfo('test.zip'); echo $info->getExtension(); // ----- Output -----> zip 

tip: он возвращает пустую строку, если файл не имеет расширения
наслаждайтесь этим;)

pathinfo - массив. Мы можем проверить имя каталога, имя файла, расширение и т.д.

$path_parts = pathinfo('test.png'); echo $path_parts['extension'], "\n"; echo $path_parts['dirname'], "\n"; echo $path_parts['basename'], "\n"; echo $path_parts['filename'], "\n"; 

Вот пример, предположим, что $filename является "example.txt"

$ext = substr($filename,strrpos($filename,'.',-1),strlen($filename)); 

Таким образом, $ext будет ".txt"

Я обнаружил, что решения pathinfo() и SplFileInfo хорошо подходят для стандартных файлов в локальной файловой системе, но вы можете столкнуться с трудностями, если работаете с удаленными файлами, поскольку URL-адреса для допустимых изображений могут иметь # (идентификаторы фрагментов) и/или ? (параметры запроса) в конце URL-адреса, которые оба эти решения будут (некорректно) рассматривать как часть расширения файла.

Я нашел, что это был надежный способ использовать pathinfo() в URL после первого разбора его, чтобы вырезать ненужный беспорядок после расширения файла:

$url_components = parse_url($url); // First parse the URL $url_path = $url_components['path']; // Then get the path component $ext = pathinfo($url_path, PATHINFO_EXTENSION); // Then use pathinfo() 

Источник

How to Get a File Extension in PHP

In PHP, there exist various ways of getting a file extension. In our tutorial, we have chosen the 5 best ways that will help you to get a file extension straightforwardly.

Go ahead and choose the one that matches your project better.

Explode a File Variable

The first way is exploding a file variable and getting the last element of the array. That will be a file extension. Here is how you can do it:

 $fileName = 'banner.jpg'; $fileNameParts = explode('.', $fileName); $ext = end($fileNameParts); echo $ext; ?>

Find the Last Occurrence of ‘.’

In the framework of the second approach, we recommend detecting the last occurrence of ‘.’, which will return a ‘.jpg’ . Afterwards, you need to remove the first character of a string using substr. As a result, the exact file extension ‘.jpg’ will be returned.

 $fileName = 'banner.jpg'; $ext = substr(strrchr($fileName, '.'), 1); echo $ext; ?>

Use strrpos

The next way is to use strrpos for detecting the position of the last occurrence of ‘.’ inside a file name, incrementing that position by 1 so that it explodes a string from (.).

The example is shown below:

 $fileName = 'banner.jpg'; $ext = substr($fileName, strrpos($fileName, '.') + 1); echo $ext; ?>

Use preg_replace

In the framework of this approach, you should apply a regular expression reach and replacement.

 $fileName = 'banner.jpg'; $ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $fileName); echo $ext; ?>

Use pathinfo

And, the final approach that we recommend is to use the PHP pathinfo() function. It is aimed at returning information about the file. In case the second optional parameter is not passed, an associative array will be returned. It will include the dirname, extension, basename, and filename. Once the second parameter is passed, then specific information will be returned.

 $fileName = 'banner.jpg'; $ext = pathinfo($fileName, PATHINFO_EXTENSION); echo $ext; ?>

So, after learning about all the possible ways described above, you are free to choose the best one for you. In our opinion, the simplest, yet the most efficient way among all these options is the pathinfo() function.

Источник

Оцените статью