without - Come ottenere(estrarre) un'estensione di file in PHP?




read extension file php (15)

usa più sicuro: PARSE_URL (invece di PATHINFO )

ad esempio, l'URL è http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ

PATHINFO restituisce:

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


PARSE_URL restituisce:

$x = parse_url($url);
$x['scheme']  ­čí║ 'http'
$x['host']    ­čí║ 'example.com'
$x['path']    ­čí║ '/myfolder/sympony.mp3'
$x['query']   ­čí║ 'aa=1&bb=2'
$x['fragment']­čí║ ''             //<----- this outputs hashtag "XYZ" only in case, when the link containing that hashtag was manually passed to function, because automatically, hashtags are not automatically detectable by PHP
dirname(parse_url($url)['path'])                      ­čí║ /myfolder
basename(parse_url($url))                             ­čí║ sympony.mp3
pathinfo(parse_url($url)['path'], PATHINFO_EXTENSION) ­čí║ mp3

ps note, parte Hashtag di url (cioè #smth ) non disponibile nella richiesta PHP, ma solo con javascript.

Per esempi utili, vedi: Ottieni l'URL completo in PHP

Questa è una domanda che puoi leggere ovunque sul web con varie risposte:

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

eccetera.

Tuttavia, c'è sempre "il modo migliore" e dovrebbe essere su Stack Overflow.


È possibile ottenere tutte le estensioni di file su una particolare cartella e fare operazioni con estensione di file specifica

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

C'è anche SplFileInfo :

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

Spesso puoi scrivere codice migliore se passi un tale oggetto invece di una stringa, quindi il tuo codice è più parlante. Dal PHP 5.4 questo è un one-liner:

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

Ecco un esempio, supponiamo che $ filename sia "example.txt"

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

Quindi $ ext sarà ".txt"


Ho trovato che le soluzioni pathinfo() e SplFileInfo funzionano bene per i file standard sul file system locale, ma puoi incontrare delle difficoltà se lavori con file remoti poiché gli URL per le immagini valide possono avere un # (identificatori di frammento) e / o ? (parametri di query) alla fine dell'URL, che entrambe le soluzioni (errate) trattano come parte dell'estensione del file.

Ho trovato che questo era un modo affidabile per usare pathinfo() su un URL dopo averlo prima analizzato per eliminare il disordine inutile dopo l'estensione del file:

$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()

Il modo più semplice per ottenere l'estensione del file in php è usare php built-in function pathinfo() .

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

Le persone di altri linguaggi di scripting pensano sempre che la loro sia migliore perché hanno una funzione incorporata per farlo e non PHP (sto guardando Pythonistas in questo momento :-)).

In effetti, esiste, ma poche persone lo sanno. Scopri pathinfo() :

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Questo è veloce e integrato. pathinfo() può darti altre informazioni, come il percorso canonico, a seconda della costante che passi ad esso.

Ricorda che se vuoi essere in grado di gestire caratteri non ASCII, devi prima impostare le impostazioni locali. PER ESEMPIO:

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

Inoltre, si noti che questo non prende in considerazione il contenuto del file o il tipo MIME, si ottiene solo l'estensione. Ma è quello che hai chiesto.

Infine, tieni presente che questo funziona solo per un percorso di file, non per un percorso di risorse URL, che viene coperto utilizzando PARSE_URL.

Godere


Perché non usare substr($path, strrpos($path,'.')+1); ? È il metodo più veloce di tutti i confronti. @Kurt Zhong ha già risposto.

Controlliamo qui il risultato comparativo: https://eval.in/661574


Se stai cercando la velocità (come in un router), probabilmente non vuoi tokenizzare tutto. Molte altre risposte falliranno con /root/my.folder/my.css

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

Sebbene il "modo migliore" sia discutibile, credo che questo sia il modo migliore per alcuni motivi:

function getExt($path)
{
    $basename = basename($path);
    return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
  1. Funziona con più parti su un'estensione, ad es. tar.gz
  2. Codice breve ed efficiente
  3. Funziona con un nome file e un percorso completo

Uso

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

per un rapido recupero dell'estensione (se sai per certo che il tuo nome file ne ha uno).


puoi provare anche questo
(funziona su php 5. * e 7)

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

tip: restituisce una stringa vuota se il file non ha estensione
divertirsi ;)


pathinfo() è array. Possiamo controllare il nome della directory, il nome del file, l'estensione ecc

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

pathinfo()

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

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

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




file-extension