【PHP8.x】posix_getpwuid関数の使い方

posix_getpwuid関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

posix_getpwuid関数は、POSIX(Portable Operating System Interface)互換システムにおいて、指定されたユーザーID(UID)に対応するユーザーの情報を取得する関数です。この関数は、システムに登録されているユーザーの情報を、プログラムから参照したい場合に利用されます。

引数には、情報を取得したいユーザーの整数型のユーザーID(UID)を指定します。

関数が成功した場合、ユーザー情報を要素として持つ連想配列を返します。この配列には、name(ユーザー名)、passwd(パスワードハッシュ)、uid(ユーザーID)、gid(プライマリグループID)、gecos(フルネームなどのコメント)、dir(ホームディレクトリ)、shell(デフォルトシェル)といった情報が含まれます。これらの情報は、システム上のユーザーアカウントの詳細を表しています。

もし指定されたUIDに対応するユーザーが見つからない場合や、その他の理由で情報の取得に失敗した場合は、この関数はfalseを返します。そのため、関数がfalseを返した際の処理を適切に記述することが重要です。

例えば、特定のユーザーIDを持つユーザーのホームディレクトリやデフォルトのシェル情報を取得し、それを基にアプリケーションの動作を制御する際などに役立ちます。システム管理ツールやセキュリティ関連のスクリプト開発において、ユーザー情報をプログラム的に扱うための基本的な機能として利用されます。

構文(syntax)

1<?php
2
3$userId = posix_getuid();
4$userInfo = posix_getpwuid($userId);
5
6if ($userInfo !== false) {
7    echo "ユーザー名: " . $userInfo['name'] . "\n";
8    echo "UID: " . $userInfo['uid'] . "\n";
9    echo "GID: " . $userInfo['gid'] . "\n";
10    echo "ホームディレクトリ: " . $userInfo['dir'] . "\n";
11    echo "シェル: " . $userInfo['shell'] . "\n";
12} else {
13    echo "UID " . $userId . " のユーザー情報を取得できませんでした。\n";
14}
15
16?>

引数(parameters)

int $uid

  • int $uid: ユーザーIDを指定する整数

戻り値(return)

array|false

指定されたユーザーIDに対応するパスワードファイルエントリを連想配列で返します。該当するエントリがない場合はfalseを返します。

サンプルコード

php posix getpwuidでユーザー情報を取得する

1<?php
2
3/**
4 * posix_getpwuid関数の使用例。
5 *
6 * このスクリプトは、指定されたユーザーID (UID) に対応するユーザー情報を取得します。
7 * システムエンジニアを目指す初心者の方にも理解しやすいように、
8 * 現在のPHPスクリプトを実行しているユーザー自身の情報を取得する例を示します。
9 */
10
11// 現在のスクリプトを実行しているユーザーのUID (User ID) を取得します。
12// これにより、ほとんどのLinux/Unix系システムで有効なUIDを使用できます。
13$targetUid = posix_geteuid();
14
15echo "UID " . $targetUid . " のユーザー情報を取得しようとしています。\n\n";
16
17// posix_getpwuid関数を呼び出し、ユーザー情報を取得します。
18// 成功するとユーザー情報の連想配列が、失敗すると false が返されます。
19$userInfo = posix_getpwuid($targetUid);
20
21// 取得結果をチェックし、ユーザー情報を表示します。
22if ($userInfo === false) {
23    echo "エラー: UID " . $targetUid . " のユーザー情報を取得できませんでした。\n";
24    echo "POSIX拡張が有効になっているか、または指定されたUIDが存在しない可能性があります。\n";
25} else {
26    echo "取得したユーザー情報:\n";
27    echo "----------------------------------------\n";
28    echo "ユーザー名 (name):        " . $userInfo['name'] . "\n";
29    echo "パスワード (passwd):      " . ($userInfo['passwd'] === 'x' ? '(shadowed)' : $userInfo['passwd']) . "\n";
30    echo "ユーザーID (uid):         " . $userInfo['uid'] . "\n";
31    echo "グループID (gid):         " . $userInfo['gid'] . "\n";
32    echo "コメント/GECOS (gecos):   " . $userInfo['gecos'] . "\n";
33    echo "ホームディレクトリ (dir): " . $userInfo['dir'] . "\n";
34    echo "シェル (shell):           " . $userInfo['shell'] . "\n";
35    echo "----------------------------------------\n";
36}
37
38?>

PHPのposix_getpwuid関数は、指定されたユーザーID(UID)に対応するユーザーの情報を取得する際に利用されます。この関数は、主にLinuxやUnix系のシステムでユーザーアカウント情報を扱うために使われるPOSIX拡張の一部です。

引数には、情報を取得したいユーザーの整数値のUIDを渡します。例えば、サンプルコードではposix_geteuid()関数を使い、現在スクリプトを実行しているユーザー自身のUIDを取得して引数として渡しています。

戻り値は、ユーザー情報の取得に成功した場合、ユーザー名(name)、ユーザーID(uid)、グループID(gid)、ホームディレクトリ(dir)、ログインシェル(shell)などの詳細を含む連想配列となります。もし指定されたUIDが存在しないか、その他の理由で情報が取得できなかった場合は、falseが返されます。そのため、戻り値がfalseでないかを確認し、適切なエラーハンドリングを行うことが重要です。

サンプルコードでは、取得したユーザー情報を整形して画面に表示しており、情報が取得できなかった場合のエラーメッセージも用意されています。これにより、システムエンジニアを目指す方々がユーザー情報の取得とその処理の基本を理解するのに役立ちます。

posix_getpwuid関数は、PHPのPOSIX拡張機能の一部で、主にLinux/Unix系のシステムでのみ利用できます。この関数を使用するには、PHPの設定ファイルでPOSIX拡張を有効にする必要があります。関数は、指定したユーザーID(UID)に対応するユーザー情報を連想配列で返しますが、情報が取得できない場合やエラー時にはfalseを返します。そのため、戻り値は必ず=== falseで厳密にチェックし、エラーハンドリングを行うことが重要です。サンプルコードは自身のUIDを取得していますが、他のユーザー情報を取得する際は、スクリプトの実行ユーザーがその情報にアクセスする権限を持っているか確認してください。また、取得されるpasswdフィールドには、セキュリティ上の理由から通常'x'が表示され、実際のパスワードは含まれませんのでご注意ください。

関連コンテンツ

関連プログラミング言語