Signatur
Beschreibung
chown() setzt den Eigentümer einer Datei oder eines Verzeichnisses auf den angegebenen Benutzer. Der Parameter user kann dabei entweder als Benutzername (String) oder als numerische User-ID (UID) übergeben werden.
Diese Funktion steht ausschließlich auf Unix-ähnlichen Betriebssystemen (Linux, macOS) zur Verfügung und ist unter Windows nicht verfügbar. Außerdem muss der PHP-Prozess mit ausreichenden Berechtigungen (root oder der aktuelle Eigentümer) laufen, um den Eigentümer einer Datei ändern zu können.
Typische Einsatzgebiete sind Server-seitige Deployment-Skripte, Installationsroutinen oder administrative Tools, die nach dem Erstellen von Dateien den Eigentümer korrekt setzen müssen – etwa wenn ein Skript als root läuft, die Datei aber einem normalen Benutzer gehören soll.
Hinweis: Symbolische Links werden von chown() aufgelöst – die Funktion ändert den Eigentümer der Zieldatei, nicht des Links selbst. Für Links steht lchown() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Datei oder zum Verzeichnis, deren Eigentümer geändert werden soll. | |
| $user Pflicht | string|int | Der neue Eigentümer als Benutzername (z. B. 'www-data') oder als numerische UID (z. B. 33). |
Rückgabewert
true zurück, wenn der Eigentümer erfolgreich geändert wurde, andernfalls false. Im Fehlerfall wird zusätzlich eine Warnung (E_WARNING) ausgegeben.Beispiele
Eigentümer einer Datei per Benutzername setzen
<?php
$datei = '/var/www/html/upload/bericht.pdf';
$neuerEigentuemer = 'www-data';
if (chown($datei, $neuerEigentuemer)) {
echo "Eigentümer erfolgreich auf '{$neuerEigentuemer}' gesetzt.";
} else {
echo "Fehler: Eigentümer konnte nicht geändert werden.";
}
Eigentümer per numerischer UID setzen
<?php
$datei = '/tmp/beispiel.txt';
// Zunächst Datei erstellen
file_put_contents($datei, 'Testinhalt');
// UID 1000 entspricht häufig dem ersten normalen Benutzer
$uid = 1000;
if (chown($datei, $uid)) {
$info = posix_getpwuid($uid);
echo "Eigentümer auf UID {$uid} (" . $info['name'] . ") gesetzt.";
} else {
echo "Fehler beim Setzen des Eigentümers.";
}
Eigentümer nach dem Erstellen einer hochgeladenen Datei korrigieren
<?php
// Beispiel: Deployment-Skript läuft als root, Datei soll nginx gehören
$zielPfad = '/var/www/html/config/settings.json';
file_put_contents($zielPfad, json_encode(['debug' => false]));
if (!chown($zielPfad, 'nginx')) {
error_log('Warnung: chown() für ' . $zielPfad . ' fehlgeschlagen.');
}
// Auch Gruppe setzen
if (!chgrp($zielPfad, 'nginx')) {
error_log('Warnung: chgrp() für ' . $zielPfad . ' fehlgeschlagen.');
}
echo 'Konfigurationsdatei erstellt und Berechtigungen gesetzt.';
// Wichtig · Fallstricke
Nur unter Unix/Linux verfügbar: Unter Windows gibt chown() immer false zurück und hat keine Wirkung.
Berechtigungen erforderlich: Nur der root-Benutzer darf den Eigentümer einer Datei beliebig ändern. Ein normaler Benutzer kann den Eigentümer einer Datei, die ihm gehört, nur auf sich selbst setzen oder – je nach Systemkonfiguration – gar nicht ändern.
Symbolische Links: chown() folgt symbolischen Links und ändert den Eigentümer der Zieldatei. Um den Eigentümer eines symbolischen Links selbst zu ändern, verwende lchown().
Sicherheit: Beim Einsatz in Web-Skripten sollte chown() nur mit sorgfältig validierten Pfaden aufgerufen werden, um Path-Traversal-Angriffe zu vermeiden. Niemals vom Benutzer übergebene Dateipfade ungefiltert verwenden.