Ini adalah pertanyaan yang dapat Anda baca di mana saja di web dengan berbagai jawaban:
$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];
dll.
Namun, selalu ada "cara terbaik" dan itu harus di Stack Overflow.
php
file-extension
e-satis
sumber
sumber
strrchr($filename, '.');
Jawaban:
Orang-orang dari bahasa skrip lain selalu berpikir bahwa bahasa mereka lebih baik karena mereka memiliki fungsi bawaan untuk melakukan itu dan bukan PHP (saya melihat Pythonistas sekarang :-)).
Sebenarnya, memang ada, tetapi sedikit orang yang mengetahuinya. Bertemu
pathinfo()
:Ini cepat dan terintegrasi.
pathinfo()
dapat memberi Anda informasi lain, seperti jalur kanonik, tergantung pada konstanta yang Anda berikan.Ingat bahwa jika Anda ingin dapat berurusan dengan karakter non ASCII, Anda harus mengatur lokal terlebih dahulu. MISALNYA:
Juga, perhatikan ini tidak mempertimbangkan konten file atau tipe mime, Anda hanya mendapatkan ekstensi. Tapi itu yang kau minta.
Terakhir, perhatikan bahwa ini hanya berfungsi untuk path file, bukan path sumber URL, yang dicakup menggunakan PARSE_URL.
Nikmati
sumber
function get_ext($fname){ return substr($fname, strrpos($fname, ".") + 1); }
Pastikan file memiliki ekstensi, itu dapat melakukan apa pun ketika Anda melewati jalan sebagai argumen!pathinfo()
sumber
echo pathinfo('/foo/bar/baz.bill')['extension'];
URL contoh:
http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ
A) Jangan gunakan yang disarankan tidak aman
PATHINFO
:B) Gunakan PARSE_URL :
BONUS: Lihat semua contoh PHP asli
sumber
foo_folder/foo-file.jpg?1345838509
akan gagal total hanyapathinfo
, thanxparse_url
adalah untuk URL danpathinfo
untuk jalur file.Ada juga
SplFileInfo
:Seringkali Anda dapat menulis kode yang lebih baik jika Anda melewatkan objek semacam itu di sekitar bukannya string. Kode Anda lebih banyak berbicara. Sejak PHP 5.4 ini adalah one-liner:
sumber
->getExtension()
tersedia di SplFileInfo sejak PHP 5.3.6.Respons E-satis adalah cara yang benar untuk menentukan ekstensi file.
Atau, alih-alih mengandalkan ekstensi file, Anda bisa menggunakan fileinfo untuk menentukan jenis file MIME.
Berikut adalah contoh sederhana dari pemrosesan gambar yang diunggah oleh pengguna:
sumber
Selama tidak mengandung jalur Anda juga bisa menggunakan:
Di mana
$fname
adalah nama file, misalnya:my_picture.jpg
. Dan hasilnya adalah:jpg
sumber
1) Jika Anda menggunakan (PHP 5> = 5.3.6) Anda dapat menggunakan SplFileInfo :: getExtension - Mendapat ekstensi file
Kode contoh
Ini akan menampilkan
2) Cara lain untuk mendapatkan ekstensi jika Anda menggunakan (PHP 4> = 4.0.3, PHP 5) adalah pathinfo
Kode contoh
Ini akan menampilkan
// EDIT: menghapus braket
sumber
Terkadang bermanfaat untuk tidak menggunakan
pathinfo($path, PATHINFO_EXTENSION)
. Sebagai contoh:Perhatikan juga bahwa
pathinfo
gagal menangani beberapa karakter non-ASCII (biasanya itu hanya menekannya dari output). Dalam ekstensi yang biasanya tidak menjadi masalah, tetapi tidak ada salahnya untuk menyadari peringatan itu.sumber
test.19-02-2014.jpeg
ltrim(strrchr($PATH, '.'),'.')
bekerja seperti pathinfo, tetapi tanpa tokenizing semuanya.Cara paling sederhana untuk mendapatkan ekstensi file dalam PHP adalah dengan menggunakan fungsi pathinfo bawaan PHP .
sumber
Anda juga dapat mencoba ini (berfungsi pada PHP 5. * dan 7):
Kiat: ini mengembalikan string kosong jika file tidak memiliki ekstensi
sumber
Maaf ... "Pertanyaan Pendek; Tapi BUKAN Jawaban Pendek"
Contoh 1 untuk PATH
Contoh 2 untuk URL
Output dari contoh 1:
Output dari contoh 2:
Referensi
https://www.php.net/manual/en/function.pathinfo.php
https://www.php.net/manual/en/function.realpath.php
https://www.php.net/manual/en/function.parse-url.php
sumber
Perbaikan cepat akan menjadi sesuatu seperti ini.
sumber
$file_ext = end(explode('.', $filename));
melakukan apa saja dalam jawaban ini dalam satu baris, bukan empat..tar.gz
. Ini tidak akan berfungsi, jadi jika Anda perlu menggunakan ekstensi penuh sepertiltrim(strstr($filename, '.'), '.');
untuk mendapatkan ekstensi penuh bukannya tidak tepatgz
.Berikut ini sebuah contoh. Misalkan $ nama file adalah "example.txt",
Jadi $ ext akan menjadi ".txt".
sumber
pathinfo adalah sebuah array. Kami dapat memeriksa nama direktori, nama file, ekstensi , dll .:
sumber
sumber
Anda juga dapat mencoba ini:
sumber
sumber
Ini akan bekerja
sumber
Saya menemukan bahwa
pathinfo()
danSplFileInfo
solusi berfungsi dengan baik untuk file standar pada sistem file lokal, tetapi Anda dapat mengalami kesulitan jika Anda bekerja dengan file jarak jauh karena URL untuk gambar yang valid mungkin memiliki#
(pengidentifikasi fragmen) dan / atau?
(parameter kueri) di akhir URL, yang akan diperlakukan oleh kedua solusi tersebut (salah) sebagai bagian dari ekstensi file.Saya menemukan ini adalah cara yang dapat diandalkan untuk digunakan
pathinfo()
pada URL setelah pertama menguraikannya untuk menghapus kekacauan yang tidak perlu setelah ekstensi file:sumber
Menggunakan
substr($path, strrpos($path,'.')+1);
. Ini adalah metode tercepat dari semua perbandingan.@Kurt Zhong sudah menjawab.
Mari kita periksa hasil perbandingannya di sini: https://eval.in/661574
sumber
Anda bisa mendapatkan semua ekstensi file di folder tertentu dan melakukan operasi dengan ekstensi file tertentu:
sumber
Kerjakan dengan cepat.
Panggilan tingkat rendah harus sangat cepat, jadi saya pikir itu layak untuk diteliti. Saya mencoba beberapa metode (dengan berbagai panjang tali, panjang ekstensi, beberapa kali masing-masing berjalan), berikut beberapa yang masuk akal:
Hasilnya tidak terlalu mengejutkan. Miskin
pathinfo
(sejauh ini!) Adalah yang paling lambat (sepertinya dia mencoba menguraikan semuanya dan kemudian menjatuhkan semua bagian yang tidak perlu) - danmethod3()
(strrpos) adalah yang tercepat, sejauh ini:CATATAN: metode pertama memiliki efek samping: metode ini mengembalikan seluruh nama ketika tidak ada ekstensi. Tentunya tidak masuk akal untuk mengukurnya dengan kekuatan tambahan untuk menghindari perilaku ini.
Kesimpulan
Ini terlihat seperti Jalan Samurai:
sumber
Jika Anda mencari kecepatan (seperti di router), Anda mungkin tidak ingin tokenize semuanya. Banyak jawaban lain akan gagal
/root/my.folder/my.css
sumber
Meskipun "cara terbaik" masih bisa diperdebatkan, saya percaya ini adalah cara terbaik karena beberapa alasan:
tar.gz
sumber
IMO, ini adalah cara terbaik jika Anda memiliki nama file seperti name.name.name.ext (jelek, tapi kadang-kadang terjadi):
sumber
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $fileName);
preg_replace pendekatan yang kami gunakan pencarian ekspresi reguler dan ganti. Dalam fungsi preg_replace, parameter pertama adalah pola pencarian, parameter kedua $ 1 adalah referensi untuk apa pun yang cocok dengan yang pertama (. *) Dan parameter ketiga adalah nama file.
Cara lain, kita juga dapat menggunakan strrpos untuk menemukan posisi kemunculan terakhir dari '.' dalam nama file dan naikkan posisi itu dengan 1 sehingga akan meledak string dari (.)
$ext = substr($fileName, strrpos($fileName, '.') + 1);
sumber
Sebenarnya, saya sedang mencari itu.
sumber
Menggunakan
untuk pengambilan ekstensi cepat (jika Anda tahu pasti nama file Anda memilikinya).
sumber