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

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

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

作成日: 更新日:

基本的な使い方

getPermsメソッドは、PHPのPharクラスに属し、Pharアーカイブのパーミッション(ファイルモード)を取得するメソッドです。Pharアーカイブは、複数のPHPファイルや関連するリソースを一つの自己完結型のパッケージとして圧縮し、配布や実行を容易にするための特殊なアーカイブ形式です。

このメソッドを使用すると、指定されたPharアーカイブファイルに対して設定されている、ファイルシステム上のアクセス権限に関する情報を取得できます。アクセス権限、つまりパーミッションは、誰がそのファイルを読み書きしたり、実行したりできるかといった制御を定義するものであり、セキュリティとシステム管理において非常に重要な要素です。例えば、デプロイされたPharアーカイブが意図せず広範囲に書き込み可能な状態になっていないかを確認する際に、このメソッドは役立ちます。

getPermsメソッドは、アーカイブの現在のパーミッション設定を整数値として返します。この整数値は、Unix系OSでファイルやディレクトリの権限を設定する際に一般的に使用されるchmod()関数に渡す数値形式と同じです。したがって、取得したパーミッション情報を基に、アーカイブのセキュリティ状態を評価したり、必要に応じてアクセス権限が適切であるかを確認したりすることができます。システム運用において、ファイルのアクセス制御は基本的な管理タスクであり、このメソッドはその理解と実践に貢献します。

構文(syntax)

1<?php
2$phar = new Phar('path/to/your/archive.phar');
3$permissions = $phar->getPerms();
4var_dump($permissions);

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

Phar::getPerms メソッドは、Phar アーカイブのパーミッション(アクセス権限)を整数値で返します。この値は、ファイルシステムのパーミッションを表すビットフラグの組み合わせです。

サンプルコード

PHP Phar::getPerms() でパーミッションを取得する

1<?php
2
3// このスクリプトは、PHPのPhar::getPerms() メソッドを使用して、
4// Pharアーカイブのファイルシステムパーミッションを取得する方法を示します。
5// システムエンジニアを目指す初心者の方にも分かりやすいように、
6// Pharアーカイブの作成からパーミッションの取得、そしてクリーンアップまでの一連の流れを簡潔に示します。
7
8// 1. Pharアーカイブのファイルパスを定義します。
9$pharFileName = 'example_phar_for_perms.phar';
10$fullPath = __DIR__ . '/' . $pharFileName;
11
12// 2. 以前の実行で残ったPharファイルが存在する場合は削除し、
13// クリーンな状態から新しいPharファイルを作成できるようにします。
14if (file_exists($fullPath)) {
15    unlink($fullPath);
16}
17
18try {
19    // 3. 新しいPharアーカイブを作成します。
20    // Pharコンストラクタにファイルパスを渡すことで、新しいPharファイルが作成されます。
21    // この操作には、PHPの設定ファイル(php.ini)で phar.readonly = 0 が設定されている必要があります。
22    $phar = new Phar($fullPath);
23
24    // Pharアーカイブが有効なものとして認識されるために、最低限のコンテンツとスタブを設定します。
25    // getPerms()自体はファイルシステム上のパーミッションを返すため必須ではありませんが、
26    // 正しいPharアーカイブを作成する手順として含めます。
27    $phar->addFromString('hello.txt', 'Hello, Phar!'); // ファイルを追加
28    // PharアーカイブがPHPスクリプトとして実行された際の初期コード(スタブ)を設定
29    $phar->setStub($phar->createDefaultStub('hello.txt'));
30
31    // 4. 作成したPharファイルのファイルシステムパーミッションを設定します。
32    // Phar::getPerms()は、このファイルシステムレベルのパーミッションを返します。
33    // 例えば、0755 (所有者は読み書き実行、グループとその他は読み取り実行) に設定します。
34    // `chmod` 関数は、ファイルのパーミッションを変更するために使用されます。
35    chmod($fullPath, 0755);
36
37    // 5. Phar::getPerms() メソッドを使用して、Pharアーカイブのパーミッションを取得します。
38    // このメソッドは引数を取りません。
39    // 戻り値は整数で、ファイルのパーミッションを表します。
40    $permissions = $phar->getPerms();
41
42    // 6. 取得したパーミッション情報を表示します。
43    // ファイルのパーミッションは通常8進数で表現されるため、
44    // `sprintf('0%o', ...)` を使用して8進数形式で表示すると分かりやすいです。
45    echo "Pharファイル名: " . $pharFileName . "\n";
46    echo "取得されたパーミッション (整数): " . $permissions . "\n";
47    echo "取得されたパーミッション (8進数): " . sprintf('0%o', $permissions) . "\n";
48    echo "設定したパーミッション (8進数): 0755\n"; // 比較のために設定値を表示
49
50} catch (PharException $e) {
51    // Phar操作中にエラーが発生した場合、例外をキャッチしてエラーメッセージを表示します。
52    // 特に、phar.readonly = 0 の設定が不足している場合によく発生します。
53    echo "Phar操作中にエラーが発生しました: " . $e->getMessage() . "\n";
54    echo "ヒント: PHP設定ファイル(php.ini)で 'phar.readonly = 0' を設定する必要があるかもしれません。\n";
55} finally {
56    // 7. クリーンアップ: スクリプトの実行後、作成したPharファイルを削除します。
57    // `$phar = null;` は、Pharオブジェクトへの参照を解除し、ファイルロックが解除されやすくします。
58    $phar = null;
59    if (file_exists($fullPath)) {
60        unlink($fullPath);
61        echo "Pharファイル '" . $pharFileName . "' を削除しました。\n";
62    }
63}
64
65?>

PHP 8のPhar::getPerms()メソッドは、作成されたPharアーカイブファイルが持つファイルシステムパーミッションを取得するために利用されます。このメソッドは引数を一切必要とせず、戻り値としてファイルパーミッションを表す整数値を返します。サンプルコードでは、まずPharクラスを使って新しいアーカイブファイルを作成し、続けてchmod関数でそのファイルに特定のファイルシステムパーミッション(例として0755)を設定します。その後、作成したPharオブジェクトに対してgetPerms()メソッドを呼び出すことで、設定したパーミッション値が正確な整数として取得できることを示しています。取得したパーミッションは、通常8進数形式で分かりやすく表現されるため、表示時には0755のような形式に変換して確認しています。なお、Pharアーカイブの作成操作には、PHPの設定ファイル(php.ini)でphar.readonly = 0が設定されている必要がある点にご注意ください。スクリプトの最後には、一時的に作成したPharファイルを削除するクリーンアップ処理も含まれており、一連の作業を安全に行う手順を学べます。

PHPでPharファイルを扱う際、特にアーカイブの作成や変更を行うには、PHP設定ファイル(php.ini)でphar.readonly = 0を設定する必要があります。これが設定されていないと、Pharファイルを生成する部分でエラーが発生しますのでご注意ください。Phar::getPerms()メソッドは、Pharアーカイブ ファイルそのもの のファイルシステムパーミッションを整数値で返します。Pharアーカイブ内部のファイルのパーミッションとは異なります。この整数値を一般的な8進数形式で表示するには、sprintf('0%o', ...)を使用すると理解しやすくなります。処理の終了時には、$phar = null;でPharオブジェクトへの参照を解放し、作成したPharファイルをunlinkで確実に削除し、リソースをクリーンアップする習慣をつけることが重要です。

Pharアーカイブのパーミッションを取得する

1<?php
2
3// このサンプルコードは、PHPのPhar::getPermsメソッドを使用して、
4// Pharアーカイブファイルのパーミッション(権限)を取得する方法を示します。
5// なお、与えられたキーワード「php get params from url」とは直接関連がありません。
6
7// Pharアーカイブファイル名と、アーカイブ内部での名前を定義します。
8$pharFileName = __DIR__ . '/example_archive.phar';
9$archiveName = 'example_archive.phar';
10
11try {
12    // 新しいPharアーカイブを作成します。
13    // 第1引数: 作成するPharファイルのパス。
14    // 第2引数: フラグ(0はデフォルト)。
15    // 第3引数: アーカイブのエイリアス(Pharオブジェクト内で参照される名前)。
16    $phar = new Phar($pharFileName, 0, $archiveName);
17
18    // Pharアーカイブ内にダミーファイルをいくつか追加します。
19    // これにより、アーカイブが有効な状態になります。
20    $phar->addFromString('index.php', '<?php echo "Hello from Phar!";');
21    $phar->addFromString('data.txt', 'This is some sample data.');
22
23    // Pharアーカイブ全体のパーミッションを設定します。
24    // PHP 8.0以降で利用可能な setPerms メソッドを使用し、0755を設定します。
25    // 0755は、所有者(rwx)、グループ(rx)、その他(rx) の権限を意味します。
26    $phar->setPerms(0755);
27
28    echo "Pharアーカイブが作成されました: " . $pharFileName . PHP_EOL;
29
30    // Pharアーカイブの現在のパーミッションを取得します。
31    // getPermsメソッドは引数を取りません。
32    // 戻り値は整数値で、ファイルシステム上のパーミッションを表現します。
33    $permissions = $phar->getPerms();
34
35    echo "Pharアーカイブのパーミッション (整数値): " . $permissions . PHP_EOL;
36    // 取得した整数値を8進数形式で表示すると、一般的なファイルパーミッション表記として理解しやすくなります。
37    echo "Pharアーカイブのパーミッション (8進数): " . sprintf('%o', $permissions) . PHP_EOL;
38
39    // Pharオブジェクトへの参照を解放します。
40    // これにより、作成したPharファイルへのロックが解除され、後でファイルを削除できるようになります。
41    $phar = null;
42
43} catch (PharException $e) {
44    // Phar操作中に発生したエラーを捕捉して表示します。
45    echo "Phar操作中にエラーが発生しました: " . $e->getMessage() . PHP_EOL;
46} finally {
47    // スクリプトの実行終了時に、作成したPharアーカイブを削除してクリーンアップします。
48    if (file_exists($pharFileName)) {
49        try {
50            // PHP 8.0以降で利用可能な unlinkArchive メソッドを使用して、Pharファイルを安全に削除します。
51            Phar::unlinkArchive($pharFileName);
52            echo "Pharアーカイブが削除されました: " . $pharFileName . PHP_EOL;
53        } catch (PharException $e) {
54            // unlinkArchiveの実行中にPhar関連のエラーが発生した場合。
55            echo "Pharアーカイブの削除中にエラーが発生しました: " . $e->getMessage() . PHP_EOL;
56        } catch (Throwable $e) {
57            // その他の予期せぬエラー(例えば、PHPバージョンが古い場合やファイルシステムの問題)の場合、
58            // @unlinkを使用して手動でファイルを削除することを試みます。
59            if (is_file($pharFileName)) {
60                @unlink($pharFileName);
61                echo "Pharアーカイブが手動で削除されました: " . $pharFileName . PHP_EOL;
62            }
63        }
64    }
65}

PHPのPhar::getPermsメソッドは、複数のファイルを一つにまとめることができるPharアーカイブファイルのアクセス権限(パーミッション)を取得するために使用されます。Pharアーカイブの全体に設定されているパーミッションがどのような状態であるかを知りたい場合に役立つ機能です。

このメソッドには引数は不要で、Pharオブジェクトに対して呼び出すだけで、現在のパーミッションを示す整数値が戻り値として返されます。この整数値は、0755のような一般的な8進数のファイルパーミッション表記を数値化したものです。取得した整数値を8進数形式に変換することで、所有者、グループ、その他のユーザーに対する読み込み、書き込み、実行の各権限を分かりやすく確認できます。

Phar::getPermsは、Pharアーカイブのセキュリティやアクセス制御の状態を確認する目的で利用されます。なお、ご提供いただいたキーワード「php get params from url」とは直接関連がありません。このメソッドはURLからクエリパラメータを取得する機能とは異なるためご注意ください。

本サンプルコードは、「URLからのパラメータ取得」というキーワードとは異なり、Pharアーカイブファイルのパーミッション(権限)取得方法を示しています。Pharは複数のPHPファイルやリソースを単一のアーカイブにまとめる特殊な機能で、一般的なWebアプリケーション開発で日常的に使用されることは稀ですのでご注意ください。

getPermsメソッドの戻り値はファイルパーミッションを表す整数値です。これをsprintf('%o', ...)のように8進数形式で表示することで、0755などの一般的なファイル権限表記として理解しやすくなります。Pharアーカイブの作成や削除はファイルシステムに直接影響するため、エラーが発生した場合でも確実にクリーンアップが行われるよう、try-catch-finallyブロックによる厳格なエラーハンドリングと、$phar = null;によるオブジェクト参照の解放が極めて重要です。

関連コンテンツ

関連IT用語

関連プログラミング言語