문제

이것은 웹 어디에서나 다양한 답변을 읽을 수 있는 질문입니다.

$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가 아닌 문자를 처리하려면 먼저 로케일을 설정해야 한다는 점을 기억하십시오.예:

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

URL의 경우 사용하지 마십시오 PATHINFO:

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

사용 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 예는 다음을 참조하십시오. PHP에서 전체 URL을 얻으십시오

도 있습니다 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 - 파일 확장자를 가져옵니다

예제 코드

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

// 편집 : 브래킷을 제거했습니다

경로가 포함되어 있지 않으면 사용할 수 있습니다.

array_pop(explode('.',$fname))

어디에 $fname 예를 들어 파일 이름입니다. my_picture.jpg그리고 결과는 다음과 같습니다. jpg

때로는 사용하지 않는 것이 유용할 때도 있습니다. 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 내장 기능을 사용하는 것입니다. pathinfo.

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

빠른 수정은 이와 같은 것입니다.

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

예를 들어 $ Filename이 "example.txt"라고 가정합니다.

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

그래서 $ ext는 ".txt"입니다.

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

당신은 이것도 시도 할 수 있습니다
(PHP 5.* 및 7 작업)

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

팁 : 파일에 확장자가없는 경우 빈 문자열을 반환합니다.
즐기십시오;)

이것은 작동합니다

$ext = pathinfo($filename, PATHINFO_EXTENSION);

나는 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()

당신은 이것도 시도 할 수 있습니다 :

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

사용하지 않는 이유 substr($path, strrpos($path,'.')+1); ? 그것은 모든 비교의 가장 빠른 방법입니다. @Kurt Zhong은 이미 대답했습니다.

여기에서 비교 결과를 확인해 봅시다. https://eval.in/661574

특정 폴더에서 모든 파일 확장을 받고 특정 파일 확장으로 작업을 수행 할 수 있습니다.

<?php
    $files=glob("abc/*.*");//abc is folder all files inside folder
    //print_r($files);
    //echo count($files);
    for($i=0;$i<count($files);$i++):
        $extension = pathinfo($files[$i], PATHINFO_EXTENSION);
        $ext[]=$extension;
        //do operation for perticular extenstion type
        if($extension=='html'){
            //do operation
        }
    endfor;
    print_r($ext);
?>

속도 (예 : 라우터)를 찾고 있다면 모든 것을 토큰 화하고 싶지 않을 것입니다. 다른 많은 답변이 실패 할 것입니다 /root/my.folder/my.css

ltrim(strrchr($PATH, '.'),'.');

"가장 좋은 방법"은 논쟁의 여지가 있지만 이것이 몇 가지 이유의 가장 좋은 방법이라고 생각합니다.

function getExt($path)
{
    $basename = basename($path);
    return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
  1. 그것은 여러 부분과 함께 확장으로 작동합니다 (예 : tar.gz
  2. 짧고 효율적인 코드
  3. 파일 이름과 완전한 경로 모두에서 작동합니다.

사실, 나는 그것을 찾고 있었다.

<?php

$url = 'http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ';
$tmp = @parse_url($url)['path'];
$ext = pathinfo($tmp, PATHINFO_EXTENSION);

var_dump($ext);

IMO Name.name.name.ext와 같은 파일 이름이있는 경우 가장 좋은 방법입니다 (Ugly이지만 때로는 발생합니다)

$ext     = explode( '.', $filename ); //explode the string
$ext_len = count( $ext ) - 1; //count the array -1 (becouse count() starts from 1)
$my_ext  = $ext[ $ext_len ]; //get the last entry of the array

echo $my_ext;

사용

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

빠른 확장 검색을 위해 (파일 이름에 하나가 있는지 확인하는 경우).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top