PHP에서 파일 확장자를 어떻게 얻거나 추출할 수 있나요?
-
05-07-2019 - |
문제
이것은 웹 어디에서나 다양한 답변을 읽을 수 있는 질문입니다.
$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 리소스 경로가 아닌 파일 경로에 대해서만 작동한다는 점에 유의하세요.
즐기다
다른 팁
$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);
}
- 그것은 여러 부분과 함께 확장으로 작동합니다 (예 :
tar.gz
- 짧고 효율적인 코드
- 파일 이름과 완전한 경로 모두에서 작동합니다.
사실, 나는 그것을 찾고 있었다.
<?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, '.'))
빠른 확장 검색을 위해 (파일 이름에 하나가 있는지 확인하는 경우).