PHP 5.5.15 is released

posix_getpwuid

(PHP 4, PHP 5)

posix_getpwuidDevolver información sobre un usuario mediante el id de usuario

Descripción

array posix_getpwuid ( int $uid )

Devuelve un array de información sobre el usuario referenciado mediante el ID de usuario dado.

Parámetros

uid

El identificador de usuario.

Valores devueltos

Devuelve un array asociativo con los siguientes elementos:

El array de información de usuario
Elemento Descripción
name El elemento name contiene el nombre del grupo. Es una abreviatura, normalmente menos de 16 caracteres "soportan" el groupo, no el nombre real completo.
passwd El elemento passwd contiene la contraseña del grupo en un formato encriptado. A menudo, por ejemplo bajo un sistema que emplea contraseñas "shadow", se devuelve un asterisco en su lugar.
uid El ID del grupo, debería ser el mismo que el del parámetro gid usado al llamar a la función, y por lo tanto redundante.
gid El ID de grupo del usuario. Use la función posix_getgrgid() para resolver el nombre de grupo y una lista de sus miembros.
gecos GECOS es un término obosleto que se refiere al campo de información "finger" de un sistema de procesamiento por lotes Honeywell. El campo, sin embargo, todavía existe, y su contenido ha sido formalizado por POSIX. El campo contiene una lista separada por comas que contiene el nombre completo del usuario, teléfono de oficina, número de oficina, y el número de teléfono de casa. En la mayoría de los sistemas solo está disponible el nombre de usuario completo.
dir Este elemento contiene la ruta absoluta al directorio "home" del usuario.
shell El elemento shell contiene la ruta absoluta al ejecutable del executable del shell predeterminado de usuario.

Ejemplos

Ejemplo #1 Ejemplo de uso de posix_getpwuid()

<?php

$userinfo 
posix_getpwuid(10000);

print_r($userinfo);
?>

El resultado del ejemplo sería algo similar a:

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

Ver también

  • posix_getpwnam() - Devolver información sobre un usuario mediante su nombre de usuario
  • POSIX man page GETPWNAM(3)

add a note add a note

User Contributed Notes 7 notes

up
1
Anonymous
1 year 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
1
martin at arp242 dot net
3 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;
}
?>
up
1
ddascalescu at gmail dot com
6 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
1
mehmet at karakaya dot us
8 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
9 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
11 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
ddascalescu at gmail dot com
6 years ago
On Windows, posix_getpwuid() is not implemented , but if you just want the username of the current user, you can use get_current_user().
To Top