web-dev-qa-db-fra.com

Obtenir le nom du fichier de script actuel

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"?

225
Alex

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, '.'));
}
358
alex

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é.

107
SparK

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

pathinfo(__FILE__, PATHINFO_FILENAME);
59
max4ever

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 .

52
Khandad Niazi

Cela pourrait aider:

basename($_SERVER['PHP_SELF'])

cela fonctionnera même si vous utilisez include.

25
charan315

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"]));
19
user

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>

11
begoyan

vous pouvez aussi utiliser ceci:

echo $pageName = basename($_SERVER['SCRIPT_NAME']);
6
Shah Alom

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.

4
Megachip

$ 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

1
JBH

Essaye ça

$current_file_name = $_SERVER['PHP_SELF'];
echo $current_file_name;

1
Wakar Ahmad Khan

__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
0
Dariusz Sikorski
$filename = "jquery.js.php";
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js
0
Rahul Gupta

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

0
Bolli

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

0
Gendrith