Pobierz bieżącą nazwę pliku skryptu

Jeśli mam skrypt PHP, Jak mogę pobrać nazwę pliku z wewnątrz tego skryptu?

Również, biorąc pod uwagę nazwę skryptu formularza jquery.js.php, Jak mogę wyodrębnić tylko " jquery.część js?

 215
Author: Shog9, 2010-11-19

15 answers

Wystarczy użyć magicznej stałej PHP __FILE__ aby uzyskać bieżącą nazwę pliku.

Ale wygląda na to, że chcesz rolę bez .php. Więc...

basename(__FILE__, '.php'); 

Bardziej ogólny program do usuwania rozszerzeń plików wyglądałby tak...

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"

Używanie standardowych funkcji string library jest znacznie szybsze , Jak można się spodziewać.

function chopExtension($filename) {
    return substr($filename, 0, strrpos($filename, '.'));
}
 346
Author: alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-18 13:10:05

Gdy chcesz, aby twój include wiedział, w jakim pliku jest (np. jaka nazwa skryptu została faktycznie zażądana), użyj:

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

Ponieważ kiedy piszesz do pliku, Zwykle znasz jego nazwę.

Edit: jak zauważył Alec Teal, jeśli używasz dowiązań symbolicznych, wyświetli nazwę dowiązania symbolicznego.

 103
Author: SparK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-30 13:05:50

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

pathinfo(__FILE__, PATHINFO_FILENAME);
 57
Author: max4ever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 11:04:44

Oto różnica między basename(__FILE__, ".php") i basename($_SERVER['REQUEST_URI'], ".php").

basename(__FILE__, ".php") pokazuje nazwę pliku, w którym znajduje się ten kod - oznacza to, że jeśli umieścisz ten kod w nagłówku .php a bieżąca strona to indeks.php , zwróci nagłówek nie indeks.

basename($_SERVER["REQUEST_URI"], ".php") - jeśli użyjesz tego kodu w nagłówku .php a bieżąca strona to indeks.php , zwróci index nie header .

 52
Author: Khandad Niazi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 21:33:09

To może pomóc:

basename($_SERVER['PHP_SELF'])

Będzie działać nawet jeśli używasz include.

 25
Author: charan315,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-10 16:13:19

ODPOWIEDŹ Alexa jest poprawna, ale można to zrobić również bez wyrażeń regularnych:

str_replace(".php", "", basename($_SERVER["SCRIPT_NAME"]));
 19
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 01:54:05

Oto lista tego, co znalazłem ostatnio szukając odpowiedzi:

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

Nie zapomnij usunąć :)

<br>

 11
Author: begoyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 09:07:48

Możesz również użyć tego:

echo $pageName = basename($_SERVER['SCRIPT_NAME']);
 6
Author: Shah Alom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-31 09:04:07

Bardziej ogólnym sposobem byłoby użycie pathinfo () . Od wersji 5.2 obsługuje PATHINFO_FILENAME.

Więc

pathinfo(__FILE__,PATHINFO_FILENAME)

Zrobi to, czego potrzebujesz.

 4
Author: Megachip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-30 22:19:39

$argv[0]

Znalazłem go znacznie prostsze w użyciu $argv[0]. Nazwa wykonującego skryptu jest zawsze pierwszym elementem tablicy $argv. W przeciwieństwie do innych metod sugerowanych w innych odpowiedziach, metoda ta nie wymaga użycia basename() do usunięcia drzewa katalogów. Na przykład:

  • echo __FILE__; zwraca coś w rodzaju /my/directory/path/my_script.php

  • echo $argv[0]; zwroty my_script.php

 1
Author: JBH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-19 03:19:47

Spróbuj Tego

$current_file_name = $_SERVER['PHP_SELF'];
echo $current_file_name;
 1
Author: Wakar Ahmad Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 05:35:09
$filename = "jquery.js.php";
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js
 0
Author: Rahul Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-21 08:21:34

__FILE__ użyj przykładów opartych na wynikach serwera 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
Author: Dariusz Sikorski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-21 11:25:22

Jak niektórzy mówili basename($_SERVER["SCRIPT_FILENAME"], '.php') i basename( __FILE__, '.php') są dobrymi sposobami, aby to przetestować.

Dla mnie za pomocą drugiego było rozwiązanie dla niektórych instrukcji walidacji, które robiłem

 0
Author: Gendrith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-09 15:03:44

Działa to dla mnie, nawet gdy jest uruchamiany wewnątrz dołączonego pliku PHP i chcesz, aby nazwa pliku bieżącego pliku php była uruchomiona:

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

Wynik:

Indeks.php

 0
Author: Bolli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 10:50:21