Wenn ich ein PHP-Skript habe, wie kann ich den Dateinamen der aktuell ausgeführten Datei ohne ihre Erweiterung erhalten?
Wie kann ich angesichts des Namens eines Skripts der Form „jquery.js.php“ nur den Teil „jquery.js“ extrahieren?
Alex
Wenn ich ein PHP-Skript habe, wie kann ich den Dateinamen der aktuell ausgeführten Datei ohne ihre Erweiterung erhalten?
Wie kann ich angesichts des Namens eines Skripts der Form „jquery.js.php“ nur den Teil „jquery.js“ extrahieren?
Alex
Verwenden Sie einfach die Magische PHP-Konstante __FILE__
um den aktuellen Dateinamen zu erhalten.
Aber anscheinend willst du das Teil ohne .php
. So…
basename(__FILE__, '.php');
Ein generischer Dateierweiterungsentferner 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 schnellerwie Sie es erwarten würden.
function chopExtension($filename) {
return substr($filename, 0, strrpos($filename, '.'));
}
Warum nicht einfach verwenden substr
Und strrchr
das letzte abzustreifen .
und alles dahinter?
– Meister der Diebe
19. November 2010 um 1:41 Uhr
@ThiefMaster Weil in PHP etwas eingebaut ist, um Dateierweiterungen zu verarbeiten. Das Rad ist vorhanden und rollt gut.
– Alex
19. November 2010 um 2:08 Uhr
Aber eine Regex könnte teurer sein!
– Meister der Diebe
19. November 2010 um 11:42 Uhr
Während __FILE__
gibt dir die .php
Datei, in der sich diese Zeile befindet, die Sie tatsächlich möchten $_SERVER['SCRIPT_NAME']
für das aktuell ausgeführte Top-Level-Skript (das vom Webserver oder direkt auf der Befehlszeile aufgerufen wurde)
– Zeichnete Stephens
28. April 2011 um 17:34 Uhr
@Drew Ich denke, das hängt davon ab, was Sie wirklich wollen.
– Alex
28. April 2011 um 23:17 Uhr
Funke
Wenn Sie möchten, dass Ihr Include weiß, in welcher Datei es sich befindet (dh welcher Skriptname tatsächlich angefordert wurde), verwenden Sie:
basename($_SERVER["SCRIPT_FILENAME"], '.php')
Denn wenn Sie in eine Datei schreiben, kennen Sie normalerweise deren Namen.
Bearbeiten: Wie von Alec Teal angemerkt, wird bei Verwendung von Symlinks stattdessen der Symlink-Name angezeigt.
Das war hilfreich für mich)) benötigt, um den Namen der Skriptdatei zu erhalten, in erforderliche Datei)
– Denys Klimenko
27. Oktober 2015 um 21:18 Uhr
Das ist falsch, es wird nicht die eigentliche PHP-Datei abgerufen, sondern die Datei, die der Webserver für die Anfrage aufgelöst hat. Anders bei Verwendung von Simlinks.
– Alec Blaugrün
28. Januar 2016 um 14:23 Uhr
Auch anders, wenn Sie PHP-FPM verwenden.
– Andrew Ensley
26. August 2016 um 13:49 Uhr
Auch wenn Sie die Erweiterung benötigen, verwenden Sie pathinfo($_SERVER["SCRIPT_FILENAME"], PATHINFO_BASENAME);
– c00000fd
13. März 2020 um 6:47 Uhr
@c00000fd Wenn Sie die Erweiterung benötigen, lassen Sie einfach den zweiten Parameter weg …
– Funke
14. März 2020 um 20:12 Uhr
max4ever
Sehen http://php.net/manual/en/function.pathinfo.php
pathinfo(__FILE__, PATHINFO_FILENAME);
Khandad Niazi
Hier ist der Unterschied zwischen basename(__FILE__, ".php")
Und basename($_SERVER['REQUEST_URI'], ".php")
.
basename(__FILE__, ".php")
zeigt den Namen der Datei an, in der dieser Code enthalten ist – Das bedeutet, wenn Sie diesen Code einfügen header.php und aktuelle Seite ist index.phpes wird zurückkehren Header nicht Index.
basename($_SERVER["REQUEST_URI"], ".php")
– Wenn Sie diesen Code verwenden, fügen Sie ihn hinzu header.php und aktuelle Seite ist index.phpes wird zurückkehren Index nicht Header.
Das könnte helfen:
basename($_SERVER['PHP_SELF'])
Es funktioniert auch, wenn Sie include verwenden.
Das lässt noch die .php
am Ende, das das OP loswerden wollte
– Brian Leishmann
24. Februar 2013 um 0:05 Uhr
@stumpx Dann kannst du es tun basename($_SERVER['PHP_SELF'], ".php");
– Katalin_2003
3. November 2014 um 19:08 Uhr
Ich habe 2 Dateien, header.php und home.php, die header.php heißt in home.php, wie kann ich im Header erkennen, dass die aktuelle Seite home.php oder contact.php ist, damit ich einige Banner usw. ändern kann.
– Moxet Khan
28. Dezember 2015 um 10:12 Uhr
Begoyan
Hier ist eine Liste, was ich kürzlich bei der Suche nach einer Antwort 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']);
Entfernen nicht vergessen 🙂
<br>
Das lässt noch die .php
am Ende, das das OP loswerden wollte
– Brian Leishmann
24. Februar 2013 um 0:05 Uhr
@stumpx Dann kannst du es tun basename($_SERVER['PHP_SELF'], ".php");
– Katalin_2003
3. November 2014 um 19:08 Uhr
Ich habe 2 Dateien, header.php und home.php, die header.php heißt in home.php, wie kann ich im Header erkennen, dass die aktuelle Seite home.php oder contact.php ist, damit ich einige Banner usw. ändern kann.
– Moxet Khan
28. Dezember 2015 um 10:12 Uhr
Benutzer
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"]));
Dies birgt die Gefahr, dass ein Dateiname wie verstümmelt wird hey.php-i-am-a-weird-filename.php
.
– Alex
19. November 2010 um 2:08 Uhr
Daran habe ich bereits gedacht, aber ich dachte, sie würden es für die in der Frage erwähnte einzelne Seite verwenden. Sie können auch überprüfen, ob die “.php” am Ende der Zeichenfolge steht. Ich möchte nicht sagen, dass Ihre Frage falsch ist, aber regelmäßige Ausdrücke können ziemlich nervig sein und werden normalerweise in Szenarien verwendet, in denen eine viel einfachere und weniger ressourcenintensive Methode verwendet werden könnte.
– Benutzer
19. November 2010 um 2:39 Uhr
Shofner Ich habe einige Benchmarks durchgeführt und Ihr Weg läuft ungefähr doppelt so schnell, aber immer noch über 1000 Iterationen beträgt der Unterschied 0,003231 Mikrosekunden.
– Alex
19. November 2010 um 12:12 Uhr