Расширения файла исполняет php

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

Это вопрос, который вы можете прочитать повсюду в Интернете с различными ответами:

$ext = end(explode('.', $filename)); $ext = substr(strrchr($filename, '.'), 1); $ext = substr($filename, strrpos($filename, '.') + 1); $ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename); $exts = split("[/\\.]", $filename); $n = count($exts)-1; $ext = $exts[$n]; 

Тем не менее, всегда есть «лучший способ», и он должен быть включен в stackoverflow.

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

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

$ext = pathinfo($filename, PATHINFO_EXTENSION); 

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

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

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

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

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

Забудьте PATHINFO , безопаснее: PARSE_URL

например, 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' // 

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']🡺 '' // 
dirname(parse_url($url)['path']) 🡺 /myfolder basename(parse_url($url)) 🡺 sympony.mp3 pathinfo(parse_url($url)['path'], PATHINFO_EXTENSION) 🡺 mp3 

ps note, Hashtag часть url (т.е. #smth ) недоступна в PHP-запросе, но только с javascript.

Существует также SplFileInfo :

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

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

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

Ответ 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; > 

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

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

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

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

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

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

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

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

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

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

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

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

Быстрое исправление будет чем-то вроде этого.

 //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]; 

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"; 
$ext = pathinfo($filename, PATHINFO_EXTENSION); 

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

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

$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() 

вы также можете попробовать следующее:

 pathinfo(basename( $_FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION) 

Почему бы не использовать substr($path, strrpos($path,'.')+1); ? Это самый быстрый метод сравнения. @ Курт Чжун уже ответил.

Давайте проверим сравнительный результат здесь: https://eval.in/661574

Вы можете получить все расширения файлов в определенной папке и выполнить операцию с определенным расширением файла

Если вы ищете скорость (например, в маршрутизаторе), вы, вероятно, не хотите все делать токенизировать. Многие другие ответы не будут выполнены с /root/my.folder/my.css

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

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

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

str_replace('.', '', strrchr($file_name, '.')) 

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

Источник

pathinfo

pathinfo() returns information about path : either an associative array or a string, depending on flags .

Note:

For information on retrieving the current path info, read the section on predefined reserved variables.

Note:

pathinfo() operates naively on the input string, and is not aware of the actual filesystem, or path components such as " .. ".

Note:

On Windows systems only, the \ character will be interpreted as a directory separator. On other systems it will be treated like any other character.

pathinfo() is locale aware, so for it to parse a path containing multibyte characters correctly, the matching locale must be set using the setlocale() function.

Parameters

If present, specifies a specific element to be returned; one of PATHINFO_DIRNAME , PATHINFO_BASENAME , PATHINFO_EXTENSION or PATHINFO_FILENAME .

If flags is not specified, returns all available elements.

Return Values

If the flags parameter is not passed, an associative array containing the following elements is returned: dirname , basename , extension (if any), and filename .

Note:

If the path has more than one extension, PATHINFO_EXTENSION returns only the last one and PATHINFO_FILENAME only strips the last one. (see first example below).

Note:

If the path does not have an extension, no extension element will be returned (see second example below).

Note:

If the basename of the path starts with a dot, the following characters are interpreted as extension , and the filename is empty (see third example below).

If flags is present, returns a string containing the requested element.

Examples

Example #1 pathinfo() Example

$path_parts = pathinfo ( '/www/htdocs/inc/lib.inc.php' );

echo $path_parts [ 'dirname' ], "\n" ;
echo $path_parts [ 'basename' ], "\n" ;
echo $path_parts [ 'extension' ], "\n" ;
echo $path_parts [ 'filename' ], "\n" ;
?>

The above example will output:

/www/htdocs/inc lib.inc.php php lib.inc

Example #2 pathinfo() example showing difference between null and no extension

$path_parts = pathinfo ( '/path/emptyextension.' );
var_dump ( $path_parts [ 'extension' ]);

$path_parts = pathinfo ( '/path/noextension' );
var_dump ( $path_parts [ 'extension' ]);
?>

The above example will output something similar to:

string(0) "" Notice: Undefined index: extension in test.php on line 6 NULL

Example #3 pathinfo() example for a dot-file

The above example will output something similar to:

Array ( [dirname] => /some/path [basename] => .test [extension] => test [filename] => )

Example #4 pathinfo() example with array dereferencing

The flags parameter is not a bitmask. Only a single value may be provided. To select only a limited set of parsed values, use array destructuring like so:

[ 'basename' => $basename , 'dirname' => $dirname ] = pathinfo ( '/www/htdocs/inc/lib.inc.php' );

var_dump ( $basename , $dirname );
?>

The above example will output something similar to:

string(11) "lib.inc.php" string(15) "/www/htdocs/inc"

See Also

  • dirname() - Returns a parent directory's path
  • basename() - Returns trailing name component of path
  • parse_url() - Parse a URL and return its components
  • realpath() - Returns canonicalized absolute pathname

Источник

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.

Источник

Читайте также:  Website contact forms html
Оцените статью