Domanda

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

ecc.

Tuttavia, esiste sempre "il modo migliore" e dovrebbe essere su Stack Overflow.

È stato utile?

Soluzione

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

In realtà esiste, ma poche persone lo sanno. Incontra pathinfo () :

$ext = pathinfo($filename, PATHINFO_EXTENSION);

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

Ricorda che se vuoi essere in grado di gestire caratteri non ASCII, devi prima impostare la locale. Per esempio:

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

Inoltre, tieni presente che questo non tiene conto del contenuto del file o del tipo mime, ottieni solo l'estensione. Ma è quello che hai chiesto.

Infine, nota che questo funziona solo per un percorso di file, non per un percorso di risorse URL, che è coperto usando PARSE_URL.

Godetevi

Altri suggerimenti

pathinfo ()

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

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

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

Per gli URL, non utilizzare 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'

Usa PARSE_URL invece:

$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'             

Nota: gli hashtag non sono disponibili sul lato server, solo se aggiunti manualmente.


Per tutti gli esempi di PHP nativi, consultare: Ottieni l'URL completo in PHP

Vi è anche SplFileInfo :

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

Spesso puoi scrivere un codice migliore se passi un oggetto del genere invece di una stringa, il tuo codice parla più allora. A partire da PHP 5.4 questo è un aspetto:

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

La risposta E-satis è il modo corretto di determinare l'estensione del file.

In alternativa, invece di fare affidamento su un'estensione di file, è possibile utilizzare il fileinfo ( http: //us2.php. net / fileinfo ) per determinare il tipo di file MIME.

Ecco un esempio semplificato di elaborazione di un'immagine caricata da un utente:

// 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(

La risposta E-satis è il modo corretto di determinare l'estensione del file.

In alternativa, invece di fare affidamento su un'estensione di file, è possibile utilizzare il fileinfo ( http: //us2.php. net / fileinfo ) per determinare il tipo di file MIME.

Ecco un esempio semplificato di elaborazione di un'immagine caricata da un utente:

<*>FILES['image']['tmp_name'], FILEINFO_MIME)) { case 'image/jpg': $im = imagecreatefromjpeg(

La risposta E-satis è il modo corretto di determinare l'estensione del file.

In alternativa, invece di fare affidamento su un'estensione di file, è possibile utilizzare il fileinfo ( http: //us2.php. net / fileinfo ) per determinare il tipo di file MIME.

Ecco un esempio semplificato di elaborazione di un'immagine caricata da un utente:

<*>FILES['image']['tmp_name']); break; case 'image/png': $im = imagecreatefrompng(

La risposta E-satis è il modo corretto di determinare l'estensione del file.

In alternativa, invece di fare affidamento su un'estensione di file, è possibile utilizzare il fileinfo ( http: //us2.php. net / fileinfo ) per determinare il tipo di file MIME.

Ecco un esempio semplificato di elaborazione di un'immagine caricata da un utente:

<*>FILES['image']['tmp_name']); break; case 'image/gif': $im = imagecreatefromgif(

La risposta E-satis è il modo corretto di determinare l'estensione del file.

In alternativa, invece di fare affidamento su un'estensione di file, è possibile utilizzare il fileinfo ( http: //us2.php. net / fileinfo ) per determinare il tipo di file MIME.

Ecco un esempio semplificato di elaborazione di un'immagine caricata da un utente:

<*>FILES['image']['tmp_name']); break; }

1) Se stai utilizzando (PHP 5 > = 5.3.6) puoi usare SplFileInfo :: getExtension - Ottiene l'estensione del file

Codice di esempio

<?php

$info = new SplFileInfo('test.png');
var_dump($info->getExtension());

$info = new SplFileInfo('test.tar.gz');
var_dump($info->getExtension());

?>

Questo produrrà

string(3) "png"
string(2) "gz"

2) Un altro modo per ottenere l'estensione se si utilizza (PHP 4 > = 4.0.3, PHP 5) è pathinfo

Codice di esempio

<?php

$ext = pathinfo('test.png', PATHINFO_EXTENSION);
var_dump($ext);

$ext = pathinfo('test.tar.gz', PATHINFO_EXTENSION);
var_dump($ext);

?>

Questo produrrà

<*>

// EDIT: rimosso una parentesi

Fintanto che non contiene percorso puoi anche usare:

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

Dove $ fname è un nome del file, ad esempio: my_picture.jpg E il risultato sarebbe: jpg

A volte è utile non usare pathinfo ($ path, PATHINFO_EXTENSION) , ad esempio:

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

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

Nota anche che pathinfo non riesce a gestire alcuni caratteri non ASCII (di solito li sopprime dall'output), in estensioni che di solito non sono un problema ma non fa male essere consapevole di questo avvertimento.

Il modo più semplice per ottenere l'estensione di file in php è utilizzare la funzione integrata di 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);

Una soluzione rapida sarebbe qualcosa del genere.

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

Ecco un esempio, supponiamo che $ nomefile sia " esempio.txt "

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

Quindi $ ext sarà " .txt "

pathinfo è un array. Possiamo controllare nome directory, nome file, 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";  

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

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

suggerimento: restituisce una stringa vuota se il file non ha estensione
divertiti;)

Funzionerà

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Ho scoperto che le soluzioni pathinfo () e SplFileInfo funzionano bene con i file standard sul file system locale, ma potresti avere difficoltà se lavori con i file remoti come URL per immagini valide possono avere un # (identificatori di frammento) e / o ? (parametri della query) alla fine dell'URL, che entrambe le soluzioni avranno ( errato) tratta come parte dell'estensione del file.

Ho scoperto che questo era un modo affidabile per usare pathinfo () su un URL dopo averlo prima analizzato per eliminare il disordine non necessario 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()

puoi provare anche questo:

 pathinfo(basename( 

puoi provare anche questo:

<*>FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION)

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

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

Puoi ottenere tutte le estensioni di file in una cartella specifica ed eseguire operazioni con un'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);
?>

Se stai cercando 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" è 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 di un'estensione, ad esempio tar.gz
  2. Codice breve ed efficiente
  3. Funziona con un nome file e un percorso completo

In realtà, stavo cercando quello.

<?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 Questo è il modo migliore se hai nomi di file come name.name.name.ext (brutto ma a volte succede)

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

Usa

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

per un rapido recupero delle estensioni (se sei sicuro che il tuo nome file ne abbia uno).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top