Fileowner: примеры (PHP)

Работа с владельцем файла через fileowner в PHP
Раздел: Работа с файловой системой
fileowner(string $filename): int|false
Описание функции fileowner()

Функция fileowner() в PHP предназначена для получения идентификатора пользователя (UID) владельца указанного файла. Эта функция применяется в основном при работе с правами доступа в Unix-подобных операционных системах, где каждый файл имеет владельца и группу.

Функция используется в ситуациях, когда необходимо программно определить владельца файла для проверки прав, аудита или логирования действий.

Аргументы функции

Функция принимает один обязательный параметр:

  • filename (string) - путь к проверяемому файлу.

Функция возвращает числовой идентификатор пользователя (UID) владельца файла в случае успеха. В случае ошибки возвращается false.

Примеры использования fileowner()
Базовый пример

Получение 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

Ряд функций 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)
Владелец:
Изменения в последних версиях PHP

Функция fileowner() не претерпела значительных изменений в PHP 8. Основное поведение сохранилось с предыдущих версий. В PHP 8 более строгая типизация может приводить к предупреждениям при передаче аргументов некорректного типа.

Расширенные примеры
Получение имени владельца через posix_getpwuid
Пример php
$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
Сравнение владельцев двух файлов
Пример php
$file1 = 'index.php';
$file2 = 'style.css';
$owner1 = fileowner($file1);
$owner2 = fileowner($file2);
if ($owner1 !== false && $owner2 !== false) {
    if ($owner1 === $owner2) {
        echo "Оба файла имеют одного владельца";
    } else {
        echo "Файлы принадлежат разным владельцам";
    }
}
Оба файла имеют одного владельца
Рекурсивный поиск файлов по владельцу
Пример php
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
JavaScript (Node.js)

В 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
Linux команда

В командной строке можно использовать stat или ls:

stat -c '%u' index.php
1000

PHP fileowner function comments

En
Fileowner Gets file owner