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

기타

그러나 항상 “가장 좋은 방법”이 있으며 스택 오버플로에 있어야합니다.



답변

다른 스크립팅 언어의 사람들은 PHP가 아닌 내장 함수를 가지고 있기 때문에 항상 더 나은 것으로 생각합니다 (Pythonistas를 지금보고 있습니다 :-)).

실제로 존재하지만 그것을 아는 사람은 거의 없습니다. 만나다 pathinfo():

$ext = pathinfo($filename, PATHINFO_EXTENSION);

이것은 빠르고 내장되어 있습니다. pathinfo()전달하는 상수에 따라 표준 경로와 같은 다른 정보를 제공 할 수 있습니다.

비 ASCII 문자를 처리하려면 로케일을 먼저 설정해야합니다. EG :

setlocale(LC_ALL,'en_US.UTF-8');

또한 파일 내용이나 MIME 유형을 고려하지 않고 확장명 만 가져옵니다. 그러나 그것은 당신이 요구 한 것입니다.

마지막으로, 이는 PARSE_URL을 사용하여 다루는 URL 자원 경로가 아닌 파일 경로에 대해서만 작동합니다.

즐겨


답변

pathinfo()

$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"

// 편집 : 괄호를 제거