web-dev-qa-db-fra.com

PHP, obtenez le nom du 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 retourne my sans l'extension.

Le fichier est juste une chaîne dans une variable.

173
Mostafa Elkady

Pas besoin de tout ça. Découvrez pathinfo () , il vous donne toutes les composantes 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 ne pouvez obtenir que certaines parties comme:

echo pathinfo('/www/htdocs/index.html', PATHINFO_EXTENSION); // outputs html
339
anon

Au lieu de pathinfo() , vous pouvez utiliser

  • basename() - Retourne le composant du nom de fichier du chemin

Exemple tiré 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 cependant connaître l'extension pour pouvoir la supprimer à l'avance.

Cependant, puisque votre question suggère que vous ayez besoin d'obtenir l'extension et le nom de base , je voterais réponse de Pekka le plus utile, car il vous donnera toutes les informations que vous voudriez sur le chemin et le fichier avec une seule fonction native.

190
Gordon

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

pathinfo($path, PATHINFO_FILENAME);

Test fonctionnel simple: https://ideone.com/POhIDC

59
yckart

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

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

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

13
caiosm1005

Si l'extension n'est pas connue, utilisez 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 MAN function pathinfo

12
anydasa

Presque toutes les solutions ci-dessus ont le nom de fichier indiqué dans la variable $ path

L'extrait ci-dessous va obtenir le nom du fichier exécuté actuellement sans extension

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

Explication

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

7
Rohan Khude

@Gordon basename fonctionnera correctement si vous connaissez l'extension, sinon vous pouvez utiliser exploser:

$filename = end(explode(".", $file));
7
fire

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

Vous trouverez ci-dessous le code d'une ligne qui renvoie uniquement le nom de fichier et supprime le nom de l'extension:

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

Il va imprimer

logo

Source: Supprimer l'extension et ne renvoyer que le nom du fichier en PHP

5

dans mon cas, j'utilise ci-dessous. Je me fiche de ce qui est son extension. : D Je pense que cela vous aidera

$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
Hoàng Vũ Tgtt

@fire Si le nom du fichier utilise des points, vous risquez d'obtenir une mauvaise sortie. J'utiliserais la méthode @Gordon mais j'obtiendrais aussi l'extension. La fonction basename fonctionne donc 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
NSINE

Tu peux écrire ça

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

Ceux-ci renverront l'élément courant du tableau, s'ils n'étaient pas utilisés auparavant.

2
Jitendra Pawar

Court

echo pathinfo(__FILE__)['filename']; // since php 5.2
2
mariovials

Nom de fichier sans extension de fichier lorsque vous ne connaissez pas cette extension:

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

1
user2047861

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
Ghanshyam Gohel

Votre réponse est ci-dessous la solution idéale pour cacher l’extension de fichier en php.

<?php
    $path = "http://$_SERVER[HTTP_Host]$_SERVER[REQUEST_URI]";
    echo basename($path, ".php");
?>
1
shaz3e

Les solutions existantes échouent lorsqu'il y a plusieurs pièces dans une extension. La fonction ci-dessous fonctionne pour plusieurs parties, un chemin complet ou juste 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
Dan Bray

Cela retourne uniquement le nom de fichier sans extension dans 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
Vincenzo Ruffa