Wie bekomme ich den aktuellen Skriptdateinamen, aber ohne die Erweiterung “.php”?

Lesezeit: 5 Minuten

Benutzeravatar von Alex
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?

Benutzeravatar von alex
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

Benutzeravatar von Spark
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

Benutzeravatar von max4ever
max4ever

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

pathinfo(__FILE__, PATHINFO_FILENAME);

Benutzeravatar von Khandad Niazi
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

Benutzeravatar von begoyan
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-Avatar des Benutzers
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

1449510cookie-checkWie bekomme ich den aktuellen Skriptdateinamen, aber ohne die Erweiterung “.php”?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy