Получить текущее имя файла script

Если у меня есть PHP script, как я могу получить имя файла изнутри script?

Также, учитывая имя script формы jquery.js.php, как я могу извлечь только часть jquery.js?

Ответ 1

Просто используйте магическую константу 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, '.'));
}

Ответ 2

Если вы хотите, чтобы ваш агент знал, в каком файле он находится (т.е. какое имя script было запрошено), используйте:

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

Потому что, когда вы пишете файл, вы обычно знаете его имя.

Изменить: Как отметил Алек Тил, если вы используете символические ссылки, вместо него будет отображаться имя символьной ссылки.

Ответ 4

Вот разница между basename(__FILE__, ".php") и basename($_SERVER['REQUEST_URI'], ".php").

basename(__FILE__, ".php") показывает имя файла, в который включен этот код. Это означает, что если вы включите этот код в header.php, а текущая страница - index.php, он вернет заголовок без индекса.

basename($_SERVER["REQUEST_URI"], ".php") - Если вы используете этот код в header.php, а текущая страница - index.php, он будет возвращать индексный заголовок.

Ответ 5

Это может помочь:

basename($_SERVER['PHP_SELF'])

он будет работать, даже если вы используете include.

Ответ 6

Ответ alex правильный, но вы также можете сделать это без регулярных выражений:

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

Ответ 7

вы также можете использовать это:

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

Ответ 8

Вот список, который я нашел недавно, чтобы найти ответ:

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

Ответ 9

Более общий способ: pathinfo(). Начиная с версии 5.2 он поддерживает PATHINFO_FILENAME.

Итак,

pathinfo(__FILE__,PATHINFO_FILENAME)

также сделает то, что вам нужно.

Ответ 10

$filename = "jquery.js.php";
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js

Ответ 11

__FILE__ используйте примеры на основе результатов локального сервера:

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

Ответ 12

Как говорят некоторые базовые имена ($ _ SERVER [ "SCRIPT_FILENAME" ], '.php') и basename (__FILE__, '.php'), являются хорошим способом проверить это.

Мне, используя второе, было решение для некоторых инструкций проверки, которые я делал