ฉันจะรับนามสกุลไฟล์ใน PHP ได้อย่างไร


723

นี่เป็นคำถามที่คุณสามารถอ่านได้ทุกที่บนเว็บพร้อมคำตอบที่หลากหลาย:

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

เป็นต้น

อย่างไรก็ตามมี "วิธีที่ดีที่สุด" เสมอและควรอยู่ใน Stack Overflow


15
แหล่งที่มาของคำถามและคำตอบ: cowburn.info/2008/01/13/get-file-extension-comparison
salathe

5
อีกวิธีหนึ่งในการรับ ext คือstrrchr($filename, '.');
verybadbug

คำตอบ:


1776

ผู้คนจากภาษาสคริปต์อื่น ๆ มักคิดว่าตัวเองดีกว่าเพราะพวกเขามีฟังก์ชั่นในตัวที่จะทำเช่นนั้นไม่ใช่ PHP (ตอนนี้ฉันกำลังดู Pythonistas อยู่ตอนนี้ :-))

ในความเป็นจริงมันมีอยู่ แต่มีน้อยคนที่จะรู้ พบกับpathinfo():

$ext = pathinfo($filename, PATHINFO_EXTENSION);

นี่คือรวดเร็วและในตัว pathinfo()สามารถให้ข้อมูลอื่น ๆ แก่คุณเช่นเส้นทางที่กำหนดขึ้นอยู่กับค่าคงที่ที่คุณส่งผ่านไป

โปรดจำไว้ว่าหากคุณต้องการจัดการกับอักขระที่ไม่ใช่ ASCII คุณต้องตั้งค่าภาษาก่อน เช่น:

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

นอกจากนี้โปรดทราบว่าสิ่งนี้ไม่ได้คำนึงถึงเนื้อหาไฟล์หรือประเภท mime คุณจะได้รับส่วนขยายเท่านั้น แต่มันคือสิ่งที่คุณขอ

สุดท้ายโปรดทราบว่าวิธีนี้ใช้ได้กับพา ธ ไฟล์เท่านั้นไม่ใช่พา ธ ของ URL URL ซึ่งครอบคลุมโดยใช้ PARSE_URL

สนุก


62
ฉันหวังว่าฉันจะลงคะแนนได้สองครั้ง ฉันไม่สามารถบอกคุณได้ว่าฉันสามารถเปลี่ยนรหัสได้เท่าไรโดยใช้ pathinfo
Mark Biek

8
ฉันก็เช่นกันฉันจึงใส่มันไว้ที่นี่!
E-satis

7
รู้วันนี้กลายเป็นวิธีที่ดีที่สุด
Ben

19
@khizaransari คุณควรมองหาผู้ให้บริการโฮสติ้งรายอื่นที่คุณได้รับคือโง่ จริงๆฉันหมายถึงมัน มีเหตุผลใดที่ไม่มีการปิดการใช้งานฟังก์ชั่นนี้ บอกพวกเขาว่า วิธีแก้ปัญหา: function get_ext($fname){ return substr($fname, strrpos($fname, ".") + 1); }ตรวจสอบให้แน่ใจว่าไฟล์นั้นมีนามสกุล แต่มันอาจทำทุกอย่างเมื่อคุณผ่านเส้นทางเป็นอาร์กิวเมนต์!
Luc

12
ความคิดเกี่ยวกับ PHP ของฉันเทียบกับ python เปลี่ยนไปอย่างสิ้นเชิงตอนนี้ฉันรู้เกี่ยวกับฟังก์ชั่นนี้แล้ว: O
Tommaso Barbugli

166

pathinfo()

$path_info = pathinfo('/foo/bar/baz.bill');

echo $path_info['extension']; // "bill"

14
ตั้งแต่ PHP 5.5 ->echo pathinfo('/foo/bar/baz.bill')['extension'];
Salman A

1
สิ่งนี้สามารถใช้งานได้ในระดับนี้ (Twitter json): $ ext = pathinfo ($ result-> Extended_entities-> media [0] -> video_info-> ชุดรูปแบบ [1] -> url, PATHINFO_EXTENSION);
KJS

100

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 ดั้งเดิมทั้งหมด


3
คำตอบนี้ครอบคลุมทุกอย่างเช่น ไฟล์เหมือนfoo_folder/foo-file.jpg?1345838509จะล้มเหลวอย่างน่าสังเวชที่มีเพียงpathinfo, Thanx

1
ไม่สมบูรณ์ในหัวข้อ แต่แน่ใจว่าแก้ปัญหาของฉันได้!
Howie

7
อย่าลืมอะไร! parse_urlสำหรับ URL และpathinfoสำหรับเส้นทางของไฟล์
Nabi KAZ

1
คุณหมายถึงอะไร "ลืมข้อมูลเส้นทาง" คุณใช้มันในการแก้ปัญหา!
ฤดูใบไม้ร่วง Leonard

1
@AutumnLeonard เขาทำไม่ได้เขาเพิ่งแสดงความแตกต่างระหว่าง pathinfo และ parse_url

59

นอกจากนี้ยังมีSplFileInfo:

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

บ่อยครั้งที่คุณสามารถเขียนโค้ดได้ดีกว่าถ้าคุณผ่านวัตถุเช่นนั้นไปรอบ ๆ แทนที่จะเป็นสตริง รหัสของคุณพูดได้มากกว่านี้ ตั้งแต่ PHP 5.4 นี่เป็นหนึ่งซับ:

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

น่าอัศจรรย์วัตถุมันลงไปหมด :)
Christopher Chase

2
โปรดระวังที่->getExtension()มีอยู่ใน SplFileInfo ตั้งแต่ PHP 5.3.6
matthias

1
@matthias: โปรดทราบว่า SPL สามารถปิดการใช้งานในเวอร์ชัน PHP ที่มีการวางจำหน่าย PHP 5.3.0 ก่อนวันที่ หากคุณยังไม่ได้ใช้ PHP 5.3 แต่ต่ำกว่า 5.2 คำตอบนี้น่าจะไม่เหมาะกับรหัสที่เสถียร มิฉะนั้นคุณสามารถทำให้โค้ดของคุณมีเสถียรภาพโดยกำหนดให้ใช้ PHP เวอร์ชันเฉพาะและประกันตัว
hakre

@hakre ในขณะที่คุณพูดถูกว่า "สามารถปิดการใช้งานในเวอร์ชั่นก่อนหน้านี้ได้ 5.3.0" ส่วนขยาย SPL นั้นจะถูกคอมไพล์โดยค่าเริ่มต้นตั้งแต่ PHP 5.0.0 ดังนั้นความคิดเห็นนี้เหมาะสมสำหรับผู้ที่ถูกบังคับให้ใช้ PHP 5.2 หรือต่ำกว่าและไม่ต้องการลาออกโดยใช้คลาส SPL ที่เจาะจง
matthias

ใช่เพียงแค่รุ่นตายปุย :)
hakre

23

การตอบสนองของ 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;
}

1
นี่คือคำตอบที่ถูกต้องเท่านั้น ฉันไม่เข้าใจว่าทำไมคนโหวตคนอื่น ใช่วิธีนี้ต้องการความพยายามมากขึ้นจากนักพัฒนา แต่มันช่วยเพิ่มประสิทธิภาพ (แม้ว่าจะน้อย แต่ก็ทำได้) โปรดดูรายละเอียด นี้
Bhavik Shah

2
@Bhavik: ในบางกรณีเราอาจต้องการเพียงนามสกุลไฟล์พวกเขาเกี่ยวกับการตรวจสอบประเภท mime แต่คำถามจริงเกี่ยวกับนามสกุลไฟล์ไม่ใช่ประเภทไฟล์ ดังนั้นนี่ไม่ใช่คำตอบที่ดีที่สุดสำหรับคำถามนี้ (ยังมีคำตอบ)
Sasi varna kumar

สวิตช์นี้ต้องใช้วงเล็บพิเศษ
rsb2097

16

ตราบใดที่มันไม่มีเส้นทางคุณสามารถใช้:

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

$fnameชื่อไฟล์อยู่ที่ไหนตัวอย่างเช่น: my_picture.jpg. และผลลัพธ์จะเป็น:jpg


@ ทำไมถึงมี 3 downvotes? มันให้ผลลัพธ์ที่เหมาะสม โปรดอธิบาย
railsbox

มันไม่ผิดเลยมันไม่ใช่วิธีที่ดีที่สุดที่จะทำ โหวตขึ้นสำหรับยอดเงินคงเหลือ

นี่เป็นวิธีที่ดีที่สุดเมื่อคุณต้องการส่วนขยายจริงและชื่อไฟล์อาจมีหลายอย่างเช่นเดียวกับผู้ใช้ที่อัปโหลดรูปภาพในกรณีของฉัน
Rauli Rajande

2
สิ่งนี้จะล้มเหลวหากชื่อไฟล์ไม่มีส่วนขยาย ลองผ่านใน "myfile" และมันจะกลับมา "myfile" ค่าส่งคืนที่ถูกต้องเป็นสตริงว่างเปล่าเป็นส่วนขยายในกรณีใช้งานนี้
pmont

สิ่งนี้ผิดใน array_pop () จะส่งการแจ้งเตือนเนื่องจากใช้ตัวชี้เป็นพารามิเตอร์
jurchiks

12

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"

// EDIT: ลบวงเล็บออก


12

pathinfo($path, PATHINFO_EXTENSION)บางครั้งก็มีประโยชน์ในการที่จะไม่ใช้ ตัวอย่างเช่น:

$path = '/path/to/file.tar.gz';

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

นอกจากนี้โปรดทราบว่าpathinfoไม่สามารถจัดการอักขระที่ไม่ใช่ ASCII บางตัวได้ ในส่วนขยายที่มักไม่มีปัญหา แต่ไม่เจ็บที่ต้องระวังข้อแม้นั้น


6
@ e-พอน: ตามWikipediaพวกเขามีสองส่วนขยาย: ระบบไฟล์เหมือน UNIX ใช้รูปแบบที่แตกต่างกันโดยไม่ต้องมีเมตาดาต้าส่วนขยายแยก ตัวละครจุดเป็นเพียงตัวละครอื่นในชื่อไฟล์หลักและชื่อไฟล์สามารถมีหลายนามสกุลมักจะเป็นตัวแทนของการเปลี่ยนแปลงที่ซ้อนกันเช่น files.tar.gz
Alix Axel

1
และถ้าเรามีจุดในชื่อผลิตภัณฑ์? ตัวอย่าง:test.19-02-2014.jpeg
Mario Radomanana

สิ่งนี้จะล้มเหลวด้วย /root/my.folder/my.css ltrim(strrchr($PATH, '.'),'.')ทำงานเหมือน pathinfo แต่ไม่มีโทเค็นทุกอย่าง
เรย์ฟอสส์

8

วิธีที่ง่ายที่สุดที่จะได้รับนามสกุลไฟล์ใน PHP คือการใช้ PHP ในตัวฟังก์ชั่นpathinfo

$file_ext = pathinfo('your_file_name_here', PATHINFO_EXTENSION);
echo ($file_ext); // The output should be the extension of the file e.g., png, gif, or html

8

คุณสามารถลองสิ่งนี้ (ใช้งานได้บน PHP 5 * และ 7):

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

เคล็ดลับ: มันจะส่งคืนสตริงว่างเปล่าหากไฟล์ไม่มีส่วนขยาย


7

ขออภัย ... "คำถามสั้น ๆ แต่ไม่ใช่คำตอบสั้น ๆ "

ตัวอย่างที่ 1 สำหรับ PATH

$path = "/home/ali/public_html/wp-content/themes/chicken/css/base.min.css";
$name = pathinfo($path, PATHINFO_FILENAME);
$ext  = pathinfo($path, PATHINFO_EXTENSION);
printf('<hr> Name: %s <br> Extension: %s', $name, $ext);

ตัวอย่างที่ 2 สำหรับ URL

$url = "//www.example.com/dir/file.bak.php?Something+is+wrong=hello";
$url = parse_url($url);
$name = pathinfo($url['path'], PATHINFO_FILENAME);
$ext  = pathinfo($url['path'], PATHINFO_EXTENSION);
printf('<hr> Name: %s <br> Extension: %s', $name, $ext);

ผลลัพธ์ของตัวอย่างที่ 1:

Name: base.min
Extension: css

ผลลัพธ์ของตัวอย่างที่ 2:

Name: file.bak
Extension: php

อ้างอิง

  1. https://www.php.net/manual/en/function.pathinfo.php

  2. https://www.php.net/manual/en/function.realpath.php

  3. https://www.php.net/manual/en/function.parse-url.php


6

การแก้ไขอย่างรวดเร็วจะเป็นแบบนี้

// Exploding the file based on the . 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];

ทำไมไม่เพียงแค่ใช้ฟังก์ชั่น php ในตัวเพื่อจุดประสงค์php.net/manual/en/function.pathinfo.phpแทนที่จะใช้รหัสยาว
Shahbaz

1
นอกจากจุดของ Shahbaz คุณสามารถ$file_ext = end(explode('.', $filename));ทำทุกอย่างในคำตอบนี้ในบรรทัดเดียวแทนที่จะเป็นสี่บรรทัด
tvanc

@Amelia ถ้าคุณมี.tar.gzอะไร มันจะไม่ทำงานดังนั้นหากคุณต้องการที่จะได้รับเต็มรูปแบบของการใช้งานส่วนขยายเช่นltrim(strstr($filename, '.'), '.');จะได้รับเต็มรูปแบบของการขยายแทน uncorrectly gzเป็น
Marin Sagovac

6

นี่คือตัวอย่าง สมมติว่าชื่อไฟล์ $ คือ "example.txt"

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

ดังนั้น $ ext จะเป็น ".txt"


6

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

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

1
สิ่งนี้จะล้มเหลวด้วย /root/my.folder/my.css
Ray Foss

1
สิ่งนี้จะต้องทำงานอย่างถูกต้อง: substr ($ path, strrpos ($ path, '.') + 1); หมายเหตุ: วิธีนี้เร็วกว่าโซลูชันอื่น ๆ ด้านบน ลองใช้เกณฑ์มาตรฐานโดยใช้สคริปต์ของเราเอง
Abbas


4
ltrim(strstr($file_url, '.'), '.')

นี่เป็นวิธีที่ดีที่สุดถ้าคุณมีชื่อไฟล์เช่น name.name.name.ext (น่าเกลียด แต่บางครั้งมันก็เกิดขึ้น



3

ฉันพบว่า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()

3

substr($path, strrpos($path,'.')+1);ใช้ มันเป็นวิธีที่เร็วที่สุดในการเปรียบเทียบทั้งหมด

@Kurt Zhong ตอบแล้ว

ลองตรวจสอบผลลัพธ์เปรียบเทียบที่นี่: https://eval.in/661574


2

คุณสามารถรับนามสกุลไฟล์ทั้งหมดในโฟลเดอร์เฉพาะและดำเนินการกับนามสกุลไฟล์เฉพาะ:

<?php
    $files = glob("abc/*.*"); // abc is the 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 particular extension type
         if($extension=='html'){
             // Do operation
         }
    endfor;
    print_r($ext);
?>

2

ทำได้เร็วขึ้น

การโทรระดับต่ำต้องเร็วมากดังนั้นฉันคิดว่ามันคุ้มค่ากับการวิจัย ฉันลองสองสามวิธี (ด้วยความยาวของสตริงที่หลากหลายความยาวของส่วนขยายหลาย ๆ ตัววิ่ง) ต่อไปนี้เป็นวิธีที่สมเหตุสมผล:

function method1($s) {return preg_replace("/.*\./","",$s);} // edge case problem
function method2($s) {preg_match("/\.([^\.]+)$/",$s,$a);return $a[1];}
function method3($s) {$n = strrpos($s,"."); if($n===false) return "";return substr($s,$n+1);}
function method4($s) {$a = explode(".",$s);$n = count($a); if($n==1) return "";return $a[$n-1];}
function method5($s) {return pathinfo($s, PATHINFO_EXTENSION);}

ผลลัพธ์ ไม่น่าประหลาดใจมาก แย่pathinfoคือ (โดยไกล!) ที่ช้าที่สุด (ดูเหมือนว่าเขากำลังพยายามแยกสิ่งทั้งหมดแล้ววางส่วนที่ไม่จำเป็นทั้งหมด) - และmethod3()(strrpos) นั้นเร็วที่สุดโดยไกล:

Original filename was: something.that.contains.dots.txt
Running 50 passes with 10000 iterations each
Minimum of measured times per pass:

    Method 1:   312.6 mike  (response: txt) // preg_replace
    Method 2:   472.9 mike  (response: txt) // preg_match
    Method 3:   167.8 mike  (response: txt) // strrpos
    Method 4:   340.3 mike  (response: txt) // explode
    Method 5:  2311.1 mike  (response: txt) // pathinfo  <--------- poor fella

หมายเหตุ: วิธีแรกมีผลข้างเคียง: มันจะคืนค่าชื่อเต็มเมื่อไม่มีส่วนขยาย แน่นอนว่ามันจะไม่สมเหตุสมผลที่จะวัดด้วย strpos เพิ่มเติมเพื่อหลีกเลี่ยงพฤติกรรมนี้

ข้อสรุป

ดูเหมือนว่าวิถีของซามูไร:

function fileExtension($s) {
    $n = strrpos($s,".");
    return ($n===false) ? "" : substr($s,$n+1);
}

1

หากคุณกำลังมองหาความเร็ว (เช่นในเราเตอร์) คุณอาจไม่ต้องการโทเค็นทุกอย่าง คำตอบอื่น ๆ อีกมากมายจะล้มเหลว/root/my.folder/my.css

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

1

แม้ว่าวิธีที่ดีที่สุดจะเป็นที่ถกเถียงกันฉันเชื่อว่านี่เป็นวิธีที่ดีที่สุดด้วยเหตุผลบางประการ:

function getExt($path)
{
    $basename = basename($path);
    return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
  1. มันทำงานได้กับหลายส่วนเพื่อขยายเช่น tar.gz
  2. รหัสสั้นและมีประสิทธิภาพ
  3. มันทำงานได้กับทั้งชื่อไฟล์และเส้นทางที่สมบูรณ์

1

IMO นี่เป็นวิธีที่ดีที่สุดถ้าคุณมีชื่อไฟล์เช่น name.name.name.ext (น่าเกลียด แต่บางครั้งมันก็เกิดขึ้น):

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

echo $my_ext;

1

$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $fileName);

preg_replace วิธีที่เราใช้ค้นหานิพจน์ปกติและแทนที่ ในฟังก์ชัน preg_replace พารามิเตอร์แรกคือรูปแบบการค้นหาพารามิเตอร์ตัวที่สอง $ 1 เป็นการอ้างอิงถึงสิ่งที่จับคู่โดยพารามิเตอร์ตัวแรก (. *) และพารามิเตอร์ตัวที่สามคือชื่อไฟล์

อีกวิธีหนึ่งเราสามารถใช้ strrpos เพื่อค้นหาตำแหน่งที่เกิดขึ้นครั้งสุดท้ายของ '.' ในชื่อไฟล์และเพิ่มตำแหน่งนั้น 1 เพื่อให้มันจะระเบิดสตริงจาก (.)

$ext = substr($fileName, strrpos($fileName, '.') + 1);


0

จริงๆแล้วฉันกำลังมองหาสิ่งนั้น

<?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);

-1

ใช้

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

สำหรับการดึงข้อมูลส่วนขยายอย่างรวดเร็ว (ถ้าคุณรู้ว่าชื่อไฟล์ของคุณมีอย่างใดอย่างหนึ่ง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.