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.
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
Au lieu de pathinfo()
, vous pouvez utiliser
basename()
- Retourne le composant du nom de fichier du cheminExemple 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.
https://php.net/manual/en/function.pathinfo.php
pathinfo($path, PATHINFO_FILENAME);
Test fonctionnel simple: https://ideone.com/POhIDC
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.
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"
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.
@Gordon basename fonctionnera correctement si vous connaissez l'extension, sinon vous pouvez utiliser exploser:
$filename = end(explode(".", $file));
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
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.
@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"
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.
Court
echo pathinfo(__FILE__)['filename']; // since php 5.2
Nom de fichier sans extension de fichier lorsque vous ne connaissez pas cette extension:
$basename = substr($filename, 0, strrpos($filename, "."));
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"
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");
?>
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
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"