wake-up-neo.net

Rufen Sie den aktuellen Namen der Skriptdatei ab

Wenn ich ein PHP Skript habe, wie bekomme ich den Dateinamen aus diesem Skript heraus?

Wenn ich den Namen eines Skripts der Form jquery.js.php nehme, wie kann ich nur den Teil "jquery.js" extrahieren?

225
Alex

Verwenden Sie einfach die magische Konstante PHP__FILE__, um den aktuellen Dateinamen zu erhalten.

Aber es scheint, Sie wollen das Teil ohne .php. So...

basename(__FILE__, '.php'); 

Ein generischer Dateierweiterung-Entferner würde so aussehen ...

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"

Die Verwendung von Standard-String-Bibliotheksfunktionen ist viel schneller wie Sie es erwarten würden.

function chopExtension($filename) {
    return substr($filename, 0, strrpos($filename, '.'));
}
358
alex

Wenn Ihr Include wissen soll, in welcher Datei es sich befindet (dh, welcher Skriptname wurde tatsächlich angefordert), verwenden Sie:

basename($_SERVER["SCRIPT_FILENAME"], '.php')

Denn wenn Sie in eine Datei schreiben, kennen Sie normalerweise den Namen.

Bearbeiten: Wie von Alec Teal angegeben, wird bei Verwendung von Symlinks stattdessen der Name des Symlinks angezeigt.

107
SparK

Siehe http://php.net/manual/de/function.pathinfo.php

pathinfo(__FILE__, PATHINFO_FILENAME);
59
max4ever

Hier ist der Unterschied zwischen basename(__FILE__, ".php") und basename($_SERVER['REQUEST_URI'], ".php").

basename(__FILE__, ".php") zeigt den Namen der Datei, in der dieser Code enthalten ist. Wenn Sie diesen Code in header.php angeben und die aktuelle Seite index.php ist, wird header nicht zurückgegeben Index.

basename($_SERVER["REQUEST_URI"], ".php") - Wenn Sie diesen Code in header.php einfügen verwenden und die aktuelle Seite index.php ist, wird index nicht header zurückgegeben.

52
Khandad Niazi

Das könnte helfen:

basename($_SERVER['PHP_SELF'])

es funktioniert auch, wenn Sie include verwenden.

25
charan315

die Antwort von alex ist richtig, aber Sie könnten dies auch ohne reguläre Ausdrücke tun:

str_replace(".php", "", basename($_SERVER["SCRIPT_NAME"]));
19
user

Hier ist eine Liste der Antworten, die ich kürzlich gefunden habe:

//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']);

Vergessen Sie nicht zu entfernen :)

<br>

11
begoyan

sie können dies auch verwenden:

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

Ein allgemeinerer Weg wäre die Verwendung von pathinfo () . Seit Version 5.2 wird PATHINFO_FILENAME unterstützt.

So

pathinfo(__FILE__,PATHINFO_FILENAME)

wird auch tun, was Sie brauchen.

4
Megachip

$ argv [0]

Ich habe es viel einfacher gefunden, $argv[0] zu verwenden. Der Name des ausführenden Skripts ist immer das erste Element im $argv-Array. Im Gegensatz zu allen anderen in anderen Antworten vorgeschlagenen Methoden erfordert diese Methode nicht die Verwendung von basename() zum Entfernen der Verzeichnisstruktur. Zum Beispiel:

  • echo __FILE__; gibt so etwas wie /my/directory/path/my_script.php zurück

  • echo $argv[0]; gibt my_script.php zurück

1
JBH

Versuche dies

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

1

__FILE__ verwende Beispiele basierend auf den Ergebnissen des localhost-Servers

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
$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

Dies funktioniert für mich, auch wenn sie in einer enthaltenen PHP -Datei ausgeführt wird und der Dateiname der aktuellen PHP-Datei ausgeführt werden soll:

$currentPage= $_SERVER["SCRIPT_NAME"];
$currentPage = substr($currentPage, 1);
echo $currentPage;

Ergebnis:

index.php

0
Bolli

Wie bereits erwähnt, sind basename($_SERVER["SCRIPT_FILENAME"], '.php') und basename( __FILE__, '.php') gute Möglichkeiten, dies zu testen. 

Für mich war der zweite die Lösung für einige Validierungsanweisungen, die ich machte

0
Gendrith