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.
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
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.
http://php.net/manual/en/function.pathinfo.php
pathinfo($path, PATHINFO_FILENAME);
Simple functional test: http://ideone.com/POhIDC
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.
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"
@Gordon basename fonctionnera très bien si vous connaissez l'extension, si vous dont vous pouvez utiliser explode:
$filename = end(explode(".", $file));
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.
@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"
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.
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
court
echo pathinfo(__FILE__)['filename']; // since php 5.2
nom du fichier sans extension 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"
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.
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");
?>
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"
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