ConFoo 2025

posix_getpwuid

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

posix_getpwuidRetorna informações sobre um usuário por ID de usuário

Descrição

posix_getpwuid(int $user_id): array|false

Retorna um array de informações sobre o usuário referenciado pelo ID de usuário fornecido.

Parâmetros

user_id

O identificador do usuário.

Valor Retornado

Retorna um array associativo com os seguintes elementos:

O array de informações do usuário
Elemento Descrição
name Este elemento contém o nome do usuário. É um "identificador" curto do usuário, geralmente com menos de 16 caracteres, e não o nome completo e real.
passwd Este elemento contém a senha do usuário em formato criptografado. Freqüentemente, por exemplo, em um sistema que utiliza senhas "ofuscadas", um asterisco é retornado.
uid O ID do usuário deve ser igual ao parâmetro user_id usado ao chamar a função e, portanto, redundante.
gid O ID do grupo do usuário. Use a função posix_getgrgid() para resolver o nome do grupo e uma lista de seus membros.
gecos GECOS é um termo obsoleto que se refere ao campo de informações digitais em um sistema de processamento em lote da Honeywell. O campo, entretanto, continua vivo e seu conteúdo foi formalizado pelo POSIX. O campo contém uma lista separada por vírgulas contendo o nome completo do usuário, telefone comercial, número do escritório e número de telefone residencial. Na maioria dos sistemas, apenas o nome completo do usuário está disponível.
dir Este elemento contém o caminho absoluto para o diretório inicial do usuário.
shell Este elemento contém o caminho absoluto para o executável do shell padrão do usuário.
A função retorna false em caso de falha.

Exemplos

Exemplo #1 Exemplo de uso de posix_getpwuid()

<?php

$userinfo
= posix_getpwuid(10000);

print_r($userinfo);
?>

O exemplo acima produzirá algo semelhante a:

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

Veja Também

  • posix_getpwnam() - Retorna informações sobre um usuário por nome de usuário
  • Página GETPWNAM(3) do manual POSIX

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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