이것은 다양한 답변을 통해 웹 어디에서나 읽을 수있는 질문입니다.
$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];
기타
그러나 항상 “가장 좋은 방법”이 있으며 스택 오버플로에 있어야합니다.
답변
다른 스크립팅 언어의 사람들은 PHP가 아닌 내장 함수를 가지고 있기 때문에 항상 더 나은 것으로 생각합니다 (Pythonistas를 지금보고 있습니다 :-)).
실제로 존재하지만 그것을 아는 사람은 거의 없습니다. 만나다 pathinfo()
:
$ext = pathinfo($filename, PATHINFO_EXTENSION);
이것은 빠르고 내장되어 있습니다. pathinfo()
전달하는 상수에 따라 표준 경로와 같은 다른 정보를 제공 할 수 있습니다.
비 ASCII 문자를 처리하려면 로케일을 먼저 설정해야합니다. EG :
setlocale(LC_ALL,'en_US.UTF-8');
또한 파일 내용이나 MIME 유형을 고려하지 않고 확장명 만 가져옵니다. 그러나 그것은 당신이 요구 한 것입니다.
마지막으로, 이는 PARSE_URL을 사용하여 다루는 URL 자원 경로가 아닌 파일 경로에 대해서만 작동합니다.
즐겨
답변
$path_info = pathinfo('/foo/bar/baz.bill');
echo $path_info['extension']; // "bill"
답변
URL 예 : http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ
A) 안전하지 않은 제안을 사용하지 마십시오PATHINFO
.
pathinfo($url)['dirname'] ? 'http://example.com/myfolder'
pathinfo($url)['basename'] ? 'sympony.mp3?a=1&b=2#XYZ' // <------- BAD !!
pathinfo($url)['extension'] ? 'mp3?a=1&b=2#XYZ' // <------- BAD !!
pathinfo($url)['filename'] ? 'sympony'
B) PARSE_URL을 사용하십시오 :
parse_url($url)['scheme'] ? 'http'
parse_url($url)['host'] ? 'example.com'
parse_url($url)['path'] ? '/myfolder/sympony.mp3'
parse_url($url)['query'] ? 'aa=1&bb=2'
parse_url($url)['fragment'] ? 'XYZ'
보너스 : 모든 기본 PHP 예제보기
답변
또한있다 SplFileInfo
:
$file = new SplFileInfo($path);
$ext = $file->getExtension();
그러한 객체를 문자열 대신 전달하면 더 나은 코드를 작성할 수 있습니다. 그러면 코드가 더 말하고 있습니다. PHP 5.4부터 이것은 하나의 라이너입니다.
$ext = (new SplFileInfo($path))->getExtension();
답변
E-satis의 응답은 파일 확장자를 결정하는 올바른 방법입니다.
또는 파일 확장자를 사용하는 대신 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;
}
답변
경로를 포함하지 않는 한 다음을 사용할 수도 있습니다.
array_pop(explode('.', $fname))
어디 $fname
예를 들어, 파일의 이름은 다음과 같습니다 my_picture.jpg
. 결과는 다음과 같습니다.jpg
답변
1) 당신이 사용하는 경우 (PHP 5> = 5.3.6)
사용할 수 SplFileInfo :: getExtension를 – 파일 확장자를 가져옵니다
예제 코드
<?php
$info = new SplFileInfo('test.png');
var_dump($info->getExtension());
$info = new SplFileInfo('test.tar.gz');
var_dump($info->getExtension());
?>
출력됩니다
string(3) "png"
string(2) "gz"
2) (PHP 4> = 4.0.3, PHP 5)를 사용하는 경우 확장 프로그램을 얻는 또 다른 방법 은 pathinfo입니다.
예제 코드
<?php
$ext = pathinfo('test.png', PATHINFO_EXTENSION);
var_dump($ext);
$ext = pathinfo('test.tar.gz', PATHINFO_EXTENSION);
var_dump($ext);
?>
출력됩니다
string(3) "png"
string(2) "gz"
// 편집 : 괄호를 제거