Получить текущее имя файла скрипта
Если у меня есть скрипт PHP, как я могу получить имя файла внутри этого скрипта?
Также дано название скрипта вида jquery.js.php
Как я могу извлечь только часть "jquery.js"?
18 ответов
Просто используйте магическую константу PHP __FILE__
чтобы получить текущее имя файла.
Но кажется, что вы хотите часть без .php
, Так...
basename(__FILE__, '.php');
Более универсальное средство для удаления расширений файлов будет выглядеть следующим образом...
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"
Как и следовало ожидать, использование стандартных функций библиотеки строк выполняется намного быстрее.
function chopExtension($filename) {
return substr($filename, 0, strrpos($filename, '.'));
}
Когда вы хотите, чтобы ваше включение знало, в каком файле оно находится (то есть, какое имя сценария было запрошено), используйте:
basename($_SERVER["SCRIPT_FILENAME"], '.php')
Потому что, когда вы пишете в файл, вы обычно знаете его имя.
Редактировать: Как отметил Алек Тил, если вы используете символические ссылки, вместо этого будет отображаться имя символической ссылки.
Смотрите http://php.net/manual/en/function.pathinfo.php
pathinfo(__FILE__, PATHINFO_FILENAME);
Вот разница между basename(__FILE__, ".php")
а также basename($_SERVER['REQUEST_URI'], ".php")
,
basename(__FILE__, ".php")
показывает имя файла, в который включен этот код - это означает, что если вы включите этот код в header.php и текущая страница будет index.php, он вернет заголовок, а не индекс.
basename($_SERVER["REQUEST_URI"], ".php")
- Если вы используете этот код в header.php, а текущая страница - index.php, он вернет индекс, а не заголовок.
Это может помочь:
basename($_SERVER['PHP_SELF'])
это будет работать, даже если вы используете include.
Вот список того, что я недавно нашел в поиске ответа:
//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']);
Не забудьте удалить:)
<br>
Ответ alex верен, но вы также можете сделать это без регулярных выражений, например:
str_replace(".php", "", basename($_SERVER["SCRIPT_NAME"]));
Вы также можете использовать это:
echo $pageName = basename($_SERVER['SCRIPT_NAME']);
Более общим способом было бы использование pathinfo (). Начиная с версии 5.2 он поддерживает PATHINFO_FILENAME
,
Так
pathinfo(__FILE__,PATHINFO_FILENAME)
также сделаю то, что вам нужно.
$ ARGV [0]
Я нашел это намного проще в использовании $argv[0]
, Имя исполняемого скрипта всегда является первым элементом в $argv
массив. В отличие от всех других методов, предложенных в других ответах, этот метод не требует использования basename()
удалить дерево каталогов. Например:
echo __FILE__;
возвращает что-то вроде/my/directory/path/my_script.php
echo $argv[0];
возвращаетсяmy_script.php
Пример:
Включенный файл:
config.php
<?php
$file_name_one = basename($_SERVER['SCRIPT_FILENAME'], '.php');
$file_name_two = basename(__FILE__, '.php');
?>
исполняемый файл:
index.php
<?php
require('config.php');
print $file_name_one."<br>\n"; // Result: index
print $file_name_two."<br>\n"; // Result: config
?>
Попробуй это
$current_file_name = $_SERVER['PHP_SELF'];
echo $current_file_name;
Хотя
__FILE__
а также
$_SERVER
являются лучшими подходами, но в некоторых случаях это может быть альтернативой:
get_included_files();
Он содержит путь к файлу, из которого вы его вызываете, и все другие включения.
Это работает для меня, даже когда запускается внутри включенного PHP-файла, и вы хотите, чтобы имя текущего файла php работало:
$currentPage= $_SERVER["SCRIPT_NAME"];
$currentPage = substr($currentPage, 1);
echo $currentPage;
Результат:
index.php
Попробуй это
$file = basename($_SERVER['PATH_INFO']);//Filename requested
__FILE__
использовать примеры на основе результатов сервера 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
Как говорили некоторые basename($_SERVER["SCRIPT_FILENAME"], '.php')
а также basename( __FILE__, '.php')
Хорошие способы проверить это.
Для меня использование второго было решением для некоторых инструкций проверки, которые я делал
$filename = "jquery.js.php";
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js