web-dev-qa-db-ja.com

現在のスクリプトファイル名を取得します

PHPスクリプトがある場合、そのスクリプト内からファイル名を取得する方法を教えてください。

また、jquery.js.phpという形式のスクリプトの名前が与えられた場合、 "jquery.js"部分だけを抽出するにはどうすればよいでしょうか。

232
Alex

現在のファイル名を取得するには、 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, '.'));
}
369
alex

インクルードに、それがどのファイルにあるのか(つまり、実際にどのスクリプト名が要求されているのか)を知らせたい場合は、次のようにします。

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

あなたがファイルに書いているとき、あなたは通常その名前を知っているので。

編集:Alec Tealで述べたように、シンボリックリンクを使用すると、代わりにシンボリックリンク名が表示されます。

109
SparK

http://php.net/manual/ja/function.pathinfo.php を参照してください。

pathinfo(__FILE__, PATHINFO_FILENAME);
62
max4ever

これがbasename(__FILE__, ".php")basename($_SERVER['REQUEST_URI'], ".php")の違いです。

basename(__FILE__, ".php")はこのコードが含まれているファイルの名前を示します - もしあなたがこのコードを header.php に含めそして現在のページが index.php であれば header notを返します インデックス

basename($_SERVER["REQUEST_URI"], ".php") - header.php にこのコードを含めて現在のページが index.php の場合、 index not header が返されます。

52
Khandad Niazi

これは役に立つかもしれません:

basename($_SERVER['PHP_SELF'])

includeを使っていても動作します。

25
charan315

アレックスの答えは正しいですが、あなたはまたそのような正規表現なしでこれをすることができます:

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

これが私が最近答えを探しているのを見つけたリストです:

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

12
begoyan

これを使うこともできます。

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

より一般的な方法は pathinfo() を使うことです。バージョン5.2以降、PATHINFO_FILENAMEをサポートしています。

そう

pathinfo(__FILE__,PATHINFO_FILENAME)

またあなたが必要とすることをするでしょう。

4
Megachip

インクルードされたPHPファイルの中で実行されていても、これは私にとってはうまくいき、実行中の現在のphpファイルのファイル名が欲しいのです:

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

結果:

index.php

2
Bolli

$ argv [0]

私は$argv[0]を使うほうがずっと簡単だとわかりました。実行スクリプトの名前は、常に$argv配列の最初の要素です。他の回答で提案されている他のすべての方法とは異なり、この方法ではディレクトリツリーを削除するのにbasename()を使用する必要はありません。例えば:

  • echo __FILE__;/my/directory/path/my_script.phpのようなものを返します

  • echo $argv[0];my_script.phpを返します

1
JBH

これを試して

$current_file_name = $_SERVER['PHP_SELF'];
echo $current_file_name;
1

__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
0
$filename = "jquery.js.php";
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js
0
Rahul Gupta

basename($_SERVER["SCRIPT_FILENAME"], '.php')basename( __FILE__, '.php')がこれをテストするための良い方法であると言ったように。

私にとって2番目のものを使用することは私が作っていたいくつかの検証指示のための解決策でした

0
Gendrith