PHP Conference Nagoya 2025

posix_getpwuid

(PHP 4, PHP 5, PHP 7, PHP 8)

posix_getpwuidKullanıcı kimliği belirtilen kullanıcı hakkında bilgi döndürür

Açıklama

posix_getpwuid(int $kullanıcı_kimliği): array|false

kullanıcı_kimliğikimlikli kullanıcı hakkında bilgiyi bir dizi içinde döndürür.

Bağımsız Değişkenler

kullanıcı_kimliği

Kullanıcı kimliği.

Dönen Değerler

Şu elemanları içeren bir ilişkisel dizi döner:

Kullanıcı bilgileri dizisi
Anahtar Açıklama
name Kullanıcının kullanıcı ismi. Kullanıcının gerçek ismi değil, en fazla 16 karakter uzunlukta olabilen ve sistemde oturum açarken kullandığı kısa adıdır.
passwd Kullanıcının parolası bu elemanda şifreli olarak bulunur. Sistemde "shadow" parolalar kullanılıyorsa sadece bir * imi bulunur.
uid Kullanıcı kimliği. İşlevi çağırıken kullanıcı_kimliği bağımsız değişkenine atananla aynı olmalıdır.
gid Kullanıcının grup kimliği. Grup ismini ve üye listesini öğrenmek için posix_getgrgid()işlevini kullanabilirsiniz.
gecos GECOS, Honeywell sistemlerden kalma artık kullanılmayan bir alan olmakla beraber içeriği POSIX tarafından şekillendirilmiştir.Alan birbirlerinden virgül ile ayrılmış olarak kullanıcının tam ismini, iş ve ev telefonlarını ve büro numarasını içerebilir. Çoğu sistemde kullanıcının tam ismi için kullanılmaktadır.
dir Kullanıcının ev dizininin mutlak yolunu içerir.
shell Kullanıcının öntanımlı kabuğunu çalıştıran dosyanın mutlak yolu.
İşlev başarısız olursa false döndürür.

Örnekler

Örnek 1 - posix_getpwuid() örneği

<?php

$userinfo
= posix_getpwuid(10000);

print_r($userinfo);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [name]    => tom
    [passwd]  => x
    [uid]     => 10000
    [gid]     => 42
    [geocs]   => "tom,,,"
    [dir]     => "/home/tom"
    [shell]   => "/bin/bash"
)

Ayrıca Bakınız

  • posix_getpwnam() - Kullanıcı adı belirtilen kullanıcı hakkında bilgi döndürür
  • POSIX getpwnam(3) kılavuz sayfası

add a note

User Contributed Notes 6 notes

up
8
ddascalescu at gmail dot com
16 years ago
Correction regarding my note below: get_current_user() does *not* get the name of the user the script is running as. Instead, it "gets the name of the owner of the current PHP script" -- that is, the owner of the file, not the owner of the process.

To properly get the running user, test if function_exists('posix_getpwuid') and if not, assume you're running on Windows and call getenv('USERNAME').
up
0
Anonymous
11 years ago
I only want the user name rather than the rest. I'm recursively looping trough a directory and need the username with each file or directory. I use stat to get file attributes that I need which gives me uid. Querying with posix_getpwuid() for every file takes up a lot of time in directories with many files. I came up with a caching mechanism (which I believe should be built-in). Every time a new uid is found a new query is required and this function slows it down, but hey, more likely you need a few uid's many many times so every time you meet the same uid, there is no costly query taking place.

Heres my code, feel free, etc., etc.

<?php
$arr_uname
= Array();
function
file_owner_cached($uid)
{
global
$arr_uname;
if (!isset(
$arr_uname[$uid]))
{
$arr_uname[$uid] = posix_getpwuid($uid)['name'];
}
return
$arr_uname[$uid];
}
?>
Works in PHP 5.3.19, under linux of course.. not tested on anything else.
up
0
mehmet at karakaya dot us
18 years ago
if the system is also a mail server and system users have userdirs with php support this function may cause a spam abuse which made by a system user.

<?php

/* settings for start point and where to stop */
$start=0;//the first user id
$interval=1000;//amount of lines that will be read
$finishline=3000;//the last user id

$first=(isset($_GET['first'])?$_GET['first']:$start);
$last=(isset($_GET['last'])?$_GET['last']:$interval);

/* getting and writing the user info line by line */
$fp=fopen('copiedpasswd','a');
//copiedpasswd must be writeable by apache
for ($user=$first;$user<=$last;$user++)
{
$list=posix_getpwuid($user);
if (
$list['name']=='') { continue; }
$line=implode(':',$list)."\n";
fputs($fp,$line);
}
//end for
fclose($fp);

/* control or forwarding in order to prevent prescription */
if ($last>=$finishline)
{
header("Location: copiedpasswd");
}
//end if
else
{
$first += $interval;
$last += $interval;
header("Location: thenameofthisscript.php?first=$first&last=$last");
}
//end else

?>

Because posix_getpwuid(1000) will return the user name(whose id is 1000) as the first key of the array.
up
0
Nikolai-Zujev-(at)-Gmail-dot-Com
20 years ago
If You are useing kernel security module, such as LIDS, GrSec or Selinux it will work only if '/etc/passwd' is readable for user, under which PHP/Apache runs, otherwice you get FALSE.
up
0
rolf dot winterscheidt at rowitech dot de
21 years ago
To get the name of the owner of a file you can use something like this:

<?php
$startscript
="/var/log/hello.log";

$fileowneruid=fileowner($startscript);
$fileownerarray=posix_getpwuid($fileowneruid);
$fileowner=$fileownerarray['name'];

echo
"Owner is $fileowner";
?>

(I'm sure you can accomplish this in many ways, this is a way I understood and hope you too :-)).

Rolf
up
-1
martin at arp242 dot net
13 years ago
Here's a fairly safe way to get the username from uid even if the posix extension isn't installed.

<?php
function GetUsernameFromUid($uid)
{
if (
function_exists('posix_getpwuid'))
{
$a = posix_getpwuid($uid);
return
$a['name'];
}
# This works on BSD but not with GNU
elseif (strstr(php_uname('s'), 'BSD'))
{
exec('id -u ' . (int) $uid, $o, $r);

if (
$r == 0)
return
trim($o['0']);
else
return
$uid;
}
elseif (
is_readable('/etc/passwd'))
{
exec(sprintf('grep :%s: /etc/passwd | cut -d: -f1', (int) $uid), $o, $r);
if (
$r == 0)
return
trim($o['0']);
else
return
$uid;
}
else
return
$uid;
}
?>
To Top