Get current user: примеры (PHP)
get_current_user: stringФункция get_current_user() возвращает имя владельца текущего PHP-скрипта.
Функция используется для получения информации о пользователе, от имени которого выполняется текущий скрипт. Это может быть полезно для логирования, отладки или создания систем контроля доступа в многопользовательских средах.
Функция не принимает параметров.
Возвращает строку (string), содержащую имя пользователя. В случае неудачи может вернуть FALSE.
<?
$user = get_current_user();
echo "Текущий пользователь: $user";
?>Текущий пользователь: www-data
<?
$currentUser = get_current_user();
if ($currentUser === false) {
echo "Не удалось определить пользователя";
} else {
echo "Имя пользователя: ".$currentUser;
}
?>Имя пользователя: www-data
В PHP существуют другие функции для получения информации о пользователе и окружении:
Возвращает информацию о пользователе по его UID. Требует включенного модуля POSIX.
<?
$info = posix_getpwuid(posix_geteuid());
echo $info['name'];
?>Возвращает имя пользователя из переменных окружения. Результат зависит от операционной системы и конфигурации.
<?
$user = getenv('USER') ?: getenv('USERNAME');
echo $user;
?>Доступ к переменной окружения через суперглобальный массив $_SERVER.
<?
echo $_SERVER['USER'] ?? 'Не определено';
?>Рекомендации: get_current_user() наиболее надежна для получения владельца скрипта. Функции работы с переменными окружения зависят от настроек сервера.
Get current user в Python
import os
import pwd
# Способ 1: через модуль os
print(os.getlogin())
# Способ 2: через UID
print(pwd.getpwuid(os.getuid()).pw_name)alex user123
// Модуль os
const os = require('os');
console.log(os.userInfo().username);
// Переменные окружения
console.log(process.env.USER || process.env.USERNAME);alex alex
# Команда whoami
echo "Текущий пользователь: $(whoami)"
# Переменная $USER
echo "USER: $USER"Текущий пользователь: alex USER: alex
Get current user в MySQL
В MySQL нет прямой аналогии, но можно получить пользователя сессии:
SELECT USER(), CURRENT_USER();'root@localhost', 'root@%'
В Windows функция может возвращать пустую строку или системное имя пользователя, отличающееся от ожидаемого.
<?
// На Windows-сервере
$user = get_current_user();
echo "Пользователь: '".$user."'"; // Может вывести пустую строку
?>Пользователь: ''
<?
$user = get_current_user();
// Неправильно: сравнение без учета типа
if ($user == false) {
echo "Ошибка";
}
?>Строка '0' будет интерпретирована как false при нестрогом сравнении.
Функция возвращает владельца скрипта, а не пользователя, от имени которого выполняется процесс (если используются механизмы вроде suEXEC).
Функция get_current_user() присутствует в PHP с ранних версий и не претерпела значительных изменений в своей работе.
- В PHP 4 и PHP 5 функция работала идентично текущей реализации.
- В PHP 7 не было изменений в поведении функции.
- В PHP 8 функция также сохранила обратную совместимость, без изменений синтаксиса или поведения.
Важное замечание: на разных операционных системах и серверных конфигурациях функция может возвращать разные результаты из-за различий в получении информации о владельце файла.
<?
function logMessage($message) {
$user = get_current_user();
$logEntry = date('Y-m-d H:i:s')." [{$user}] {$message}".PHP_EOL;
file_put_contents('app.log', $logEntry, FILE_APPEND);
}
logMessage("Страница загружена");
?><?
$allowedUsers = ['www-data', 'nginx', 'apache'];
$currentUser = get_current_user();
if (!in_array($currentUser, $allowedUsers, true)) {
die("Доступ запрещен. Неавторизованный пользователь: {$currentUser}");
}
echo "Доступ разрешен для пользователя: {$currentUser}";
?><?
$scriptOwner = get_current_user();
$fileOwner = fileowner(__FILE__);
$fileOwnerName = posix_getpwuid($fileOwner)['name'] ?? 'неизвестно';
if ($scriptOwner !== $fileOwnerName) {
echo "Внимание: скрипт выполняется от имени {$scriptOwner}, ";
echo "но владелец файла: {$fileOwnerName}";
}
?><?
$currentUser = get_current_user();
$processInfo = shell_exec("ps aux | grep {$currentUser} | head -5");
echo "Процессы пользователя {$currentUser}:\n{$processInfo}";
?><?
function getCachedCurrentUser() {
static $user = null;
if ($user === null) {
$user = get_current_user();
}
return $user;
}
// При многократном вызове функция выполнится только один раз
echo getCachedCurrentUser()."\n";
echo getCachedCurrentUser()."\n";
?>