posix_getpwuid

(PHP 4, PHP 5, PHP 7)

posix_getpwuidВозвращает информацию о пользователе, используя его ID

Описание

array posix_getpwuid ( int $uid )

Возвращает array с информацией о пользователе, используя идентификатор пользователя.

Список параметров

uid

Идентификатор пользователя.

Возвращаемые значения

Возвращает ассоциативный массив со следующими элементами:

Массив с информацией о пользователе
Элемент Описание
name Элемент name содержит имя пользователя. Это короткий, обычно менее 16 символов "дескриптор" пользователя, не являющийся фактическим полным именем пользователя.
passwd Элемент passwd содержит пароль группы в зашифрованном виде. Часто, например в системах, использующих "shadow" файлы для хранения информации о паролях, это поле содержит звёздочку.
uid Числовой идентификатор пользователя, должен совпадать с параметром uid, переданном при вызове функции. Является избыточным.
gid Идентификатор группы пользователя. Используйте функцию posix_getgrgid() для получения имени группы и списка пользователей- её членов.
gecos GECOS является устаревшим членом, который указывает на информационное поле в системе пакетной обработки Honeywell. Однако, это поле существует, и его содержимое было формализовано в стандарте POSIX. Это поле содержит список, разделенный запятыми, и содержащий в себе полное имя пользователя, рабочий телефон, номер офиса и домашний телефон. В большинстве систем доступно только полное имя пользователя.
dir Этот элемент содержит абсолютный путь к домашней директории пользователя.
shell Элемент shell содержит абсолютный путь к исполняемому файлу командной оболочки пользователя по умолчанию.

Примеры

Пример #1 Пример использования posix_getpwuid()

<?php

$userinfo 
posix_getpwuid(10000);

print_r($userinfo);
?>

Результатом выполнения данного примера будет что-то подобное:

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

Смотрите также

  • posix_getpwnam() - Возвращает информацию о пользователе по его имени
  • POSIX руководство GETPWNAM(3)

Коментарии

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
2003-05-28 07:34:24
http://php5.kiev.ua/manual/ru/function.posix-getpwuid.html
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.
2004-09-25 17:05:11
http://php5.kiev.ua/manual/ru/function.posix-getpwuid.html
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.
2006-03-19 13:45:48
http://php5.kiev.ua/manual/ru/function.posix-getpwuid.html
On Windows, posix_getpwuid() is not implemented , but if you just want the username of the current user, you can use get_current_user().
2008-04-04 20:39:34
http://php5.kiev.ua/manual/ru/function.posix-getpwuid.html
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').
2008-04-08 22:14:47
http://php5.kiev.ua/manual/ru/function.posix-getpwuid.html
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;
}
?>
2011-07-04 10:18:30
http://php5.kiev.ua/manual/ru/function.posix-getpwuid.html
Автор:
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.
2013-02-05 17:37:22
http://php5.kiev.ua/manual/ru/function.posix-getpwuid.html

    Поддержать сайт на родительском проекте КГБ