Fileowner: примеры (PHP)
fileowner(string $filename): int|falseФункция fileowner() в PHP предназначена для получения идентификатора пользователя (UID) владельца указанного файла. Эта функция применяется в основном при работе с правами доступа в Unix-подобных операционных системах, где каждый файл имеет владельца и группу.
Функция используется в ситуациях, когда необходимо программно определить владельца файла для проверки прав, аудита или логирования действий.
Функция принимает один обязательный параметр:
filename(string) - путь к проверяемому файлу.
Функция возвращает числовой идентификатор пользователя (UID) владельца файла в случае успеха. В случае ошибки возвращается false.
Получение UID владельца файла:
$ownerId = fileowner('index.php');
echo "Владелец файла имеет UID: $ownerId";Владелец файла имеет UID: 1000
Проверка существования файла перед вызовом функции:
$file = 'config.php';
if (file_exists($file)) {
$uid = fileowner($file);
echo "UID владельца: $uid";
} else {
echo "Файл не найден";
}UID владельца: 1000
Ряд функций PHP предоставляет информацию о файлах:
filegroup()- возвращает идентификатор группы файла. Используется совместно сfileowner()для полной проверки прав.posix_getpwuid()- преобразует UID в имя пользователя. Часто применяется послеfileowner()для получения читаемого имени.stat()- возвращает массив с подробной информацией о файле, включая UID владельца (элемент 'uid'). Полезна при необходимости получить несколько характеристик файла за одно обращение к файловой системе.
$result = fileowner('несуществующий_файл.txt');
var_dump($result);bool(false)
Если у скрипта нет прав на чтение информации о файле:
$result = fileowner('/root/.bashrc');
var_dump($result);bool(false)
$uid = fileowner('somefile.txt');
echo "Владелец: $uid"; // Если файла нет, выведет 'Владелец: ' (пустое значение false)Владелец:
Функция fileowner() не претерпела значительных изменений в PHP 8. Основное поведение сохранилось с предыдущих версий. В PHP 8 более строгая типизация может приводить к предупреждениям при передаче аргументов некорректного типа.
$file = 'index.php';
$uid = fileowner($file);
if ($uid !== false) {
$userInfo = posix_getpwuid($uid);
if ($userInfo) {
echo "Файл принадлежит пользователю: {$userInfo['name']}";
} else {
echo "Не удалось получить имя для UID: $uid";
}
} else {
echo "Ошибка получения информации о владельце";
}Файл принадлежит пользователю: www-data
$file1 = 'index.php';
$file2 = 'style.css';
$owner1 = fileowner($file1);
$owner2 = fileowner($file2);
if ($owner1 !== false && $owner2 !== false) {
if ($owner1 === $owner2) {
echo "Оба файла имеют одного владельца";
} else {
echo "Файлы принадлежат разным владельцам";
}
}Оба файла имеют одного владельца
function findFilesByOwner($dir, $targetUid) {
$results = [];
$files = scandir($dir);
foreach ($files as $file) {
if ($file === '.' || $file === '..') continue;
$path = $dir . '/' . $file;
if (is_dir($path)) {
$results = array_merge($results, findFilesByOwner($path, $targetUid));
} elseif (fileowner($path) === $targetUid) {
$results[] = $path;
}
}
return $results;
}
$uid = fileowner('index.php');
if ($uid !== false) {
$files = findFilesByOwner('.', $uid);
echo "Файлы, принадлежащие UID $uid:\n";
print_r($files);
}Файлы, принадлежащие UID 1000:
Array
(
[0] => ./index.php
[1] => ./style.css
[2] => ./script.js
)Fileowner в Python
Модуль os предоставляет функцию stat():
import os
stat_info = os.stat('index.php')
print(f"UID владельца: {stat_info.st_uid}")UID владельца: 1000
В Node.js используется метод stat() из модуля fs:
const fs = require('fs');
fs.stat('index.php', (err, stats) => {
if (err) throw err;
console.log(`UID владельца: ${stats.uid}`);
});UID владельца: 1000
В командной строке можно использовать stat или ls:
stat -c '%u' index.php1000