PHP, obtenir le nom de fichier sans extension de fichier

j'ai ce code PHP:

function ShowFileExtension($filepath)
{
    preg_match('/[^?]*/', $filepath, $matches);
    $string = $matches[0];

    $pattern = preg_split('/./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);

    if(count($pattern) > 1)
    {
        $filenamepart = $pattern[count($pattern)-1][0];
        preg_match('/[^?]*/', $filenamepart, $matches);
        return strtolower($matches[0]);
    }
}

Si j'ai un fichier nommé my.zip , cette fonction renvoie .zip .

je veux faire l'inverse, je veux que la fonction "retour aux 151930920" sans l'extension.

le fichier n'est qu'une chaîne dans une variable.

152
demandé sur Eric Leschinski 2010-02-02 14:10:29

17 réponses

Pas besoin de tout ça. Découvrez pathinfo() , il vous donne accès à tous les composants de votre chemin.

exemple tiré du manuel:

$path_parts = pathinfo('/www/htdocs/index.html');

echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // filename is only since PHP 5.2.0

sortie du code:

/www/htdocs
index.html
html
index

et alternativement vous pouvez obtenir seulement certaines parties comme:

echo pathinfo('/www/htdocs/index.html', PATHINFO_EXTENSION); // outputs html
280
répondu Czechnology 2016-07-30 18:39:41

comme alternative à pathinfo() , vous pouvez utiliser

  • basename() - retourne la composante de nom de fichier du chemin

exemple du manuel PHP

$path = "/home/httpd/html/index.php";
$file = basename($path);         // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"

vous devez savoir l'extension pour l'enlever à l'avance cependant.

cependant, puisque votre question suggère que vous avez le besoin d'obtenir la prolongation et le nom de base, je voterais réponse de Pekka comme la plus utile, parce qu'il vous donnera n'importe quelle information que vous voudriez sur le chemin et le dossier avec une seule fonction native.

182
répondu Gordon 2017-05-23 11:54:54

http://php.net/manual/en/function.pathinfo.php

pathinfo($path, PATHINFO_FILENAME);

Simple functional test: http://ideone.com/POhIDC

45
répondu yckart 2015-03-06 08:31:37

une autre approche consiste à utiliser des expressions régulières.

$fileName = basename($filePath);
$fileNameNoExtension = preg_replace("/\.[^.]+$/", "", $fileName);

Cela enlève de la dernière période . jusqu'à la fin de la chaîne.

11
répondu caiosm1005 2014-03-21 02:13:06

si l'extension n'est pas connue, utiliser cette solution""

 pathinfo('D:/dir1/dir2/fname', PATHINFO_FILENAME); // return "fname"
 pathinfo('D:/dir1/dir2/fname.php', PATHINFO_FILENAME); // return "fname"
 pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_FILENAME); // return "fname"

 pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_DIRNAME) . '/' . pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_FILENAME); // return "D:/dir1/dir2/fname"

PHP HOMME fonction pathinfo

9
répondu anydasa 2017-07-24 21:46:24

@Gordon basename fonctionnera très bien si vous connaissez l'extension, si vous dont vous pouvez utiliser explode:

$filename = end(explode(".", $file));
8
répondu fire 2014-03-21 14:13:40

presque toutes les solutions ci-dessus ont le nom de fichier affiché à partir de la variable $ path

ci-Dessous extrait de obtenez le courant exécuté nom du fichier sans l'extension

echo pathinfo(basename($_SERVER['SCRIPT_NAME']), PATHINFO_FILENAME);

explication

$ _SERVER ['SCRIPT_NAME'] contient le chemin du script actuel.

6
répondu Rohan Khude 2017-06-12 06:07:41

@fire incase le nom du fichier utilise des points, vous pourriez obtenir la mauvaise sortie. J'utiliserais la méthode @Gordon mais j'obtiendrais l'extension aussi, donc la fonction basename fonctionne avec toutes les extensions, comme ceci:

$path = "/home/httpd/html/index.php";
$ext = pathinfo($path, PATHINFO_EXTENSION);

$file = basename($path, ".".$ext); // $file is set to "index"
4
répondu NSINE 2013-05-02 12:15:32

dans mon cas, j'utilise ci-dessous. Je n'aime pas quelle est son extension. :D je pense que ça va vous aider à

$exploded_filepath = explode(".", $filepath_or_URL);
$extension = end($exploded_filepath);
echo basename($filepath_or_URL, ".".$extension ); //will print out the the name without extension.
4
répondu Hoàng Vũ Tgtt 2016-09-13 19:46:39

il n'est pas nécessaire d'écrire beaucoup de code. Même cela peut être fait par une seule ligne de code. Voir ici

ci-dessous est le code d'une ligne qui renvoie le nom du fichier seulement et supprime le nom de l'extension:

<?php
 echo pathinfo('logo.png')['filename'];
?>

il va imprimer

logo

Source: Supprimer l'extension et retourner Seulement le nom du fichier en PHP

3
répondu Faruque Ahamed Mollick 2018-02-10 19:12:15

court

echo pathinfo(__FILE__)['filename']; // since php 5.2
2
répondu mariovials 2015-12-28 12:35:38

nom du fichier sans extension lorsque vous ne connaissez pas cette extension:

$basename = substr($filename, 0, strrpos($filename, "."));

1
répondu user2047861 2014-08-27 07:37:00

si vous ne savez pas quelle extension vous avez, alors vous pouvez essayer ceci:

$ext = strtolower(substr('yourFileName.ext', strrpos('yourFileName.ext', '.') + 1));
echo basename('yourFileName.ext','.'.$ext); // output: "youFileName" only

travailler avec toutes les possibilités:

image.jpg // output: "image"
filename.image.png // output: "filename.image"
index.php // output: "index"
1
répondu Ghanshyam Gohel 2015-06-25 17:53:38

vous pouvez écrire ceci

$filename = current(explode(".", $file));

ceux-ci retourneront l'élément courant du tableau, s'il n'a pas été utilisé auparavant.

1
répondu Jitendra Pawar 2015-10-06 11:59:33

votre réponse est ci-dessous la solution parfaite pour cacher l'extension de fichier en php.

<?php
    $path = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    echo basename($path, ".php");
?>
1
répondu shaz3e 2016-05-21 13:35:51

Ce retour uniquement le nom de fichier sans extension en 1 ligne:

$path = "/etc/sudoers.php";    
print array_shift(explode(".", basename($path)));
// will print "sudoers"

$file = "file_name.php";    
print array_shift(explode(".", basename($file)));
// will print "file_name"
0
répondu Vincenzo Ruffa 2015-03-27 15:20:22

les solutions existantes échouent lorsqu'il y a plusieurs parties à une extension. La fonction ci-dessous fonctionne pour plusieurs parties, un chemin complet ou tout simplement un nom de fichier:

function removeExt($path)
{
    $basename = basename($path);
    return strpos($basename, '.') === false ? $path : substr($path, 0, - strlen($basename) + strlen(explode('.', $basename)[0]));
}

echo removeExt('https://example.com/file.php');
// https://example.com/file
echo removeExt('https://example.com/file.tar.gz');
// https://example.com/file
echo removeExt('file.tar.gz');
// file
echo removeExt('file');
// file
0
répondu Dan Bray 2018-08-05 15:21:37