Si j'ai un script PHP, comment puis-je obtenir le nom de fichier à l'intérieur de ce script?
De plus, étant donné le nom d'un script de la forme jquery.js.php
, comment puis-je extraire uniquement la partie "jquery.js"?
Utilisez simplement la constante magique PHP__FILE__
pour obtenir le nom du fichier actuel.
Mais il semble que vous souhaitiez la partie sans .php
. Alors...
basename(__FILE__, '.php');
Un suppresseur d'extension de fichier plus générique ressemblerait à ceci ...
function chopExtension($filename) {
return pathinfo($filename, PATHINFO_FILENAME);
}
var_dump(chopExtension('bob.php')); // string(3) "bob"
var_dump(chopExtension('bob.i.have.dots.Zip')); // string(15) "bob.i.have.dots"
Utiliser les fonctions standard de la bibliothèque de chaînes est beaucoup plus rapide , comme on peut s’y attendre.
function chopExtension($filename) {
return substr($filename, 0, strrpos($filename, '.'));
}
Si vous voulez que votre inclusion sache dans quel fichier elle se trouve (c.-à-d. Quel nom de script a été demandé), utilisez:
basename($_SERVER["SCRIPT_FILENAME"], '.php')
Parce que lorsque vous écrivez dans un fichier, vous connaissez généralement son nom.
Modifier: comme l’a noté Alec Teal, si vous utilisez des liens symboliques, le nom du lien symbolique sera affiché.
Voir http://php.net/manual/en/function.pathinfo.php
pathinfo(__FILE__, PATHINFO_FILENAME);
Voici la différence entre basename(__FILE__, ".php")
et basename($_SERVER['REQUEST_URI'], ".php")
.
basename(__FILE__, ".php")
indique le nom du fichier contenant ce code. Cela signifie que si vous incluez ce code dans header.php et que la page en cours est index.php , elle renverra header not index .
basename($_SERVER["REQUEST_URI"], ".php")
- Si vous utilisez inclure ce code dans header.php et que la page actuelle est index.php , elle renverra index not header .
Cela pourrait aider:
basename($_SERVER['PHP_SELF'])
cela fonctionnera même si vous utilisez include.
la réponse d'Alex est correcte, mais vous pouvez aussi le faire sans expressions régulières comme ceci:
str_replace(".php", "", basename($_SERVER["SCRIPT_NAME"]));
Voici une liste de ce que j'ai trouvé récemment en cherchant une réponse:
//self name with file extension
echo basename(__FILE__) . '<br>';
//self name without file extension
echo basename(__FILE__, '.php') . '<br>';
//self full url with file extension
echo __FILE__ . '<br>';
//parent file parent folder name
echo basename($_SERVER["REQUEST_URI"]) . '<br>';
//parent file parent folder name with //s
echo $_SERVER["REQUEST_URI"] . '<br>';
// parent file name without file extension
echo basename($_SERVER['PHP_SELF'], ".php") . '<br>';
// parent file name with file extension
echo basename($_SERVER['PHP_SELF']) . '<br>';
// parent file relative url with file etension
echo $_SERVER['PHP_SELF'] . '<br>';
// parent file name without file extension
echo basename($_SERVER["SCRIPT_FILENAME"], '.php') . '<br>';
// parent file name with file extension
echo basename($_SERVER["SCRIPT_FILENAME"]) . '<br>';
// parent file full url with file extension
echo $_SERVER["SCRIPT_FILENAME"] . '<br>';
//self name without file extension
echo pathinfo(__FILE__, PATHINFO_FILENAME) . '<br>';
//self file extension
echo pathinfo(__FILE__, PATHINFO_EXTENSION) . '<br>';
// parent file name with file extension
echo basename($_SERVER['SCRIPT_NAME']);
N'oubliez pas d'enlever :)
<br>
vous pouvez aussi utiliser ceci:
echo $pageName = basename($_SERVER['SCRIPT_NAME']);
Un moyen plus général serait d'utiliser pathinfo () . Depuis la version 5.2, il supporte PATHINFO_FILENAME
.
Alors
pathinfo(__FILE__,PATHINFO_FILENAME)
fera également ce dont vous avez besoin.
$ argv [0]
J'ai trouvé beaucoup plus simple d'utiliser $argv[0]
. Le nom du script en cours d'exécution est toujours le premier élément du tableau $argv
. Contrairement à toutes les autres méthodes suggérées dans d'autres réponses, cette méthode ne nécessite pas l'utilisation de basename()
pour supprimer l'arborescence. Par exemple:
echo __FILE__;
renvoie quelque chose comme /my/directory/path/my_script.php
echo $argv[0];
renvoie my_script.php
Essaye ça
$current_file_name = $_SERVER['PHP_SELF'];
echo $current_file_name;
__FILE__
utilise des exemples basés sur les résultats du serveur localhost:
echo __FILE__;
// C:\LocalServer\www\templates\page.php
echo strrchr( __FILE__ , '\\' );
// \page.php
echo substr( strrchr( __FILE__ , '\\' ), 1);
// page.php
echo basename(__FILE__, '.php');
// page
$filename = "jquery.js.php";
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js
Cela fonctionne pour moi, même lorsqu'il est exécuté dans un fichier PHP inclus, et que vous voulez que le nom du fichier du fichier php courant soit exécuté:
$currentPage= $_SERVER["SCRIPT_NAME"];
$currentPage = substr($currentPage, 1);
echo $currentPage;
Résultat:
index.php
Comme certains l'ont dit, basename($_SERVER["SCRIPT_FILENAME"], '.php')
et basename( __FILE__, '.php')
sont de bons moyens de tester cela.
Pour moi, utiliser le second était la solution pour certaines instructions de validation que je faisais