Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】Phar::running()メソッドの使い方

runningメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

runningメソッドは、現在実行中のPHPスクリプトがPhar(PHPアーカイブ)ファイル内で動作しているかどうかを判定し、その情報を取得するメソッドです。Pharとは、複数のPHPファイルや関連リソース(画像、CSSなど)を一つのアーカイブファイルにまとめ、単一のファイルとして配布や実行を可能にするための仕組みです。

このメソッドが呼び出された際、もし現在のスクリプトがPharアーカイブの一部として実行されている場合は、そのPharアーカイブファイル自体の絶対パスを文字列として返します。この機能は、アプリケーションが自身の実行環境がPhar内にあることを認識し、Phar内部に格納されている他のファイルへのパスを動的に構築したり、Phar環境に特化した処理を行ったりする際に非常に役立ちます。例えば、設定ファイルやデータベースファイルがPharアーカイブ内に含まれている場合に、それらへのアクセスパスを適切に解決するために利用できます。

一方、現在実行中のスクリプトがPharアーカイブの外部で動作している場合、つまり通常のPHPファイルとして実行されている場合は、このメソッドはブーリアン値のfalseを返します。これにより、開発者は実行コンテキストに応じて処理を分岐させることができ、Pharアプリケーションの堅牢性を高めることができます。このメソッドは、Pharベースのアプリケーションを開発する上で、自己の実行環境を把握するための重要なツールの一つです。

構文(syntax)

1<?php
2$currentPharPath = Phar::running();
3?>

引数(parameters)

bool $returnPhar = true

  • bool $returnPhar = true: true を指定すると Phar オブジェクトが返されます。false を指定すると Phar オブジェクトのパスが返されます。

戻り値(return)

string|false

Phar::running() は、現在実行中の Phar アーカイブのファイルパスを文字列で返します。実行中の Phar アーカイブがない場合は false を返します。

サンプルコード

Phar::running()でPhar実行パスを取得する

1<?php
2
3/**
4 * 現在のPHPスクリプトがPharアーカイブ内で実行されているかを判定し、そのパスを表示します。
5 *
6 * システムエンジニアを目指す初心者がPhar::running()メソッドの基本的な使い方を
7 * 理解するためのサンプルです。
8 *
9 * 注: このスクリプトを通常のPHPファイルとして直接実行した場合、Phar::running()はfalseを返します。
10 * Pharアーカイブ内で実行した場合の動作を確認するには、このファイルをPharアーカイブに含めて実行してください。
11 * (例: `php my_application.phar`)
12 */
13function checkPharExecutionStatus(): void
14{
15    // Phar::running() は、現在のスクリプトがPharアーカイブの一部として実行されている場合に、
16    // そのPharアーカイブのパスを文字列として返します。
17    // そうでない場合(通常のPHPファイルとして実行されている場合)は、falseを返します。
18    // 引数 $returnPhar (デフォルトは true) が true の場合、Pharファイル自体のパスを返します。
19    // false の場合、Pharが一時的に展開されたディレクトリのパスを返します。
20    $pharPath = Phar::running(true);
21
22    if ($pharPath !== false) {
23        echo "このスクリプトはPharアーカイブ内で実行されています。\n";
24        echo "Pharアーカイブのパス: " . $pharPath . "\n";
25    } else {
26        echo "このスクリプトは通常のPHPファイルとして実行されています。\n";
27    }
28}
29
30// 関数を呼び出してPharの実行状況を確認します。
31checkPharExecutionStatus();

Phar::running()メソッドは、現在実行中のPHPスクリプトが「Pharアーカイブ」と呼ばれる単一の配布ファイル形式内で動作しているかどうかを判定するために使用されます。Pharアーカイブは、複数のPHPファイルや関連ファイルを一つにまとめ、配布や実行を容易にするものです。

このメソッドを呼び出すと、スクリプトがPharアーカイブの一部として実行されている場合に、そのPharアーカイブの完全なパスを文字列として返します。もしPharアーカイブ内で実行されていない場合(例えば、通常のPHPファイルとして直接実行されている場合)は、falseを返します。

引数 $returnPhar はオプションで、デフォルト値は true です。trueを指定すると、Pharファイルそのもののパスが返されます。一方、falseを指定すると、Pharアーカイブが一時的に展開されたディレクトリのパスが返されます。

サンプルコードでは、Phar::running(true)を呼び出し、その戻り値がfalseでないかどうかを確認しています。戻り値が文字列(パス)であればPharアーカイブ内で実行されていると判断し、そのパスを表示します。falseであれば、通常のPHPファイルとして実行されていることを表示します。

この機能は、アプリケーションがどのような実行環境で動いているかをプログラムで判断し、Pharアーカイブ内でのみ有効な処理を行いたい場合などに役立ちます。なお、このサンプルコードを通常のPHPファイルとして直接実行した場合、Phar::running()falseを返しますのでご注意ください。Pharアーカイブ内での動作を確認するには、このスクリプトをPharアーカイブに含めて実行する必要があります。

Phar::running()メソッドは、PHPスクリプトがPharアーカイブ内で実行されている場合にのみ、そのPharファイルのパスを返します。通常のPHPファイルとして直接実行すると常にfalseを返しますので、実際の動作確認にはスクリプトをPharアーカイブに含めて実行する必要がある点に特にご注意ください。戻り値は文字列またはfalseなので、正確な判定のためには厳密な比較演算子!== falseを使用することが推奨されます。また、引数$returnPharの指定により、Pharファイル自体のパスと、一時的に展開されたディレクトリのパスとで、得られるパスの意味が異なりますので、目的応じて使い分けてください。

PHP Phar実行状況を確認する

1<?php
2
3/**
4 * この関数は、現在のPHPスクリプトがPhar (PHP Archive) ファイルから
5 * 実行されているかどうかをチェックし、その結果を表示します。
6 *
7 * システムエンジニアを目指す初心者の方へ:
8 * Pharファイルは、複数のPHPファイルや関連リソースを1つのアーカイブファイルに
9 * まとめることができる仕組みです。これにより、PHPアプリケーションを
10 * 1つの実行可能なファイルとして配布・デプロイでき、ソフトウェアの管理が容易になります。
11 * この `Phar::running()` メソッドは、現在実行中のスクリプトが
12 * このPharという「ソフトウェアパッケージ」の一部として動作しているかを
13 * プログラムで判断する際に使用されます。
14 */
15function displayPharExecutionStatus(): void
16{
17    // Phar::running() を呼び出し、現在の実行状況を確認します。
18    // このメソッドは、スクリプトがPharアーカイブ内から実行されている場合、
19    // そのPharアーカイブの完全なパスを文字列で返します。
20    // そうでない場合(通常のPHPファイルとして実行されている場合)は false を返します。
21    $pharPath = Phar::running();
22
23    if ($pharPath === false) {
24        // 現在のスクリプトがPharアーカイブ内から実行されていない場合の処理
25        echo "現在のPHPスクリプトは、Pharアーカイブ内から実行されていません。\n";
26        echo "ヒント: このコードをPharアーカイブに含めて実行すると、異なる結果が得られます。\n";
27    } else {
28        // 現在のスクリプトがPharアーカイブ内から実行されている場合の処理
29        echo "現在のPHPスクリプトは、Pharアーカイブ内から実行されています!\n";
30        echo "実行中のPharアーカイブのパス: " . $pharPath . "\n";
31
32        // Phar::running(false) は、Pharアーカイブ内でのスクリプトのパスを返します。
33        // 例えば、`my_app.phar/index.php` のような形式です。
34        $scriptInPharPath = Phar::running(false);
35        echo "Pharアーカイブ内のスクリプトのパス: " . $scriptInPharPath . "\n";
36    }
37}
38
39// 関数を呼び出して、現在のPHP実行状況を確認し、結果を表示します。
40displayPharExecutionStatus();
41
42?>

Phar::running() メソッドは、現在のPHPスクリプトがPhar(PHP Archive)ファイルから実行されているかどうかを判別するために使用されます。Pharファイルは、複数のPHPファイルや関連リソースを一つのアーカイブファイルにまとめ、PHPアプリケーションの配布やデプロイを容易にする仕組みです。

このメソッドは、スクリプトがPharアーカイブ内から実行されている場合、そのPharアーカイブの完全なパスを文字列として返します。もしPharアーカイブ内から実行されていない場合はfalseを返します。引数$returnPhartrue(デフォルト)を指定するとPharアーカイブ自体のパスが返されますが、falseを指定するとPharアーカイブ内で実行されているスクリプトのパスが返されます。

サンプルコードでは、Phar::running()の戻り値がfalseかどうかで現在の実行状況を判断し、Pharアーカイブから実行されている場合にはそのパスと、Phar::running(false)で得られるアーカイブ内のスクリプトパスを表示しています。これにより、プログラムが自身がパッケージ化されたソフトウェアとして動作しているかを簡単に確認できます。

Phar::running() メソッドの戻り値は、Pharアーカイブのパス文字列または論理値 false ですので、結果の判定は === false のように厳密な比較を行うことが重要です。引数を true にするとPharアーカイブ自身のパスが返り、false にするとPharアーカイブ内のスクリプトの相対パスが返るため、用途に応じて適切に使い分けてください。このメソッドは、スクリプトがPharアーカイブ内から実行されているかを確認するもので、通常のPHPファイルとして実行した場合は常に false を返します。そのため、本機能をテストするには実際にPharアーカイブを作成し、そこからスクリプトを実行する必要があります。

関連コンテンツ