W3docs

chmod()

chmod() ist eine PHP-Funktion zum Ändern des Dateimodus, der Zugriffsrechte und Berechtigungen für Dateien und Verzeichnisse festlegt.

Die PHP-Funktion chmod() verstehen

chmod() ändert den Modus (die Berechtigungsbits) einer Datei oder eines Verzeichnisses auf einem Unix-ähnlichen Dateisystem. Der Modus steuert, wer was mit der Datei tun darf: ihren Inhalt lesen, in sie schreiben oder sie ausführen. Korrekte Berechtigungen sind sicherheitskritisch — zu freizügig und jeder kann sensible Daten lesen oder überschreiben; zu restriktiv und der Webserver kann die Dateien nicht lesen, die er ausliefern muss.

Diese Seite behandelt die Syntax, das Lesen und Schreiben des oktalen Modus, die gängigsten Berechtigungswerte, den Rückgabewert sowie typische Fallstricke (die führende Null, umask und Windows).

Syntax

chmod(string $filename, int $permissions): bool
ParameterBeschreibung
$filenamePfad zur Datei oder zum Verzeichnis, deren Berechtigungen geändert werden sollen.
$permissionsDer neue Modus als oktale Ganzzahl (z. B. 0644).

Die Funktion gibt true bei Erfolg und false bei Misserfolg zurück.

Wie der oktale Modus funktioniert

Der Modus ist eine dreistellige oktale Zahl. Jede Stelle beschreibt eine Benutzerklasse:

StelleGilt für
1. Stelle (z. B. 644)Eigentümer der Datei
2. Stelle (z. B. 644)Gruppe
3. Stelle (z. B. 644)Andere (alle übrigen)

Jede Stelle ist die Summe der Berechtigungen, die dieser Klasse gewährt werden:

WertBerechtigung
4Lesen
2Schreiben
1Ausführen
0Keine

Addition: Lesen + Schreiben = 4 + 2 = 6 und Lesen + Ausführen = 4 + 1 = 5. 0750 bedeutet also Eigentümer: lesen/schreiben/ausführen (7), Gruppe: lesen/ausführen (5), Andere: nichts (0).

Warnung

In PHP muss der Modus mit einer führenden 0 geschrieben werden, damit er als oktal interpretiert wird. chmod("file.txt", 644) übergibt die dezimale Zahl 644, die dem oktalen Wert 1204 entspricht — mit ziemlicher Sicherheit nicht das Gewünschte. Schreiben Sie immer 0644.

Häufig verwendete Berechtigungswerte

ModusEigentümerGruppeAndereTypische Verwendung
0644lesen/schreibenlesenlesenReguläre Dateien (HTML, Bilder, Konfiguration, die der Server liest)
0600lesen/schreibenPrivate Dateien (Zugangsdaten, Schlüssel)
0755lesen/schreiben/ausführenlesen/ausführenlesen/ausführenVerzeichnisse und ausführbare Skripte
0700lesen/schreiben/ausführenPrivate Verzeichnisse
0777alleallealleSelten sinnvoll — jeder kann lesen und überschreiben

Beispiele

Berechtigungen für eine einzelne Datei setzen

Der Modus 0644 erlaubt dem Eigentümer Lesen und Schreiben, während Gruppe und alle anderen nur lesen dürfen:

<?php
if (chmod("example.txt", 0644)) {
    echo "Permissions updated.";
} else {
    echo "Failed to change permissions.";
}

Ein Skript ausführbar machen

Um ein PHP-Skript direkt auszuführen (z. B. als CLI-Cron-Job), benötigt der Eigentümer die Ausführungsberechtigung:

<?php
chmod("backup.php", 0744); // owner: rwx, group & others: read only

Immer den Rückgabewert prüfen

chmod() scheitert lautlos, indem es false zurückgibt — zum Beispiel wenn das Skript die Datei nicht besitzt. Gehen Sie nicht davon aus, dass der Aufruf erfolgreich war:

<?php
$file = "config.ini";
if (!chmod($file, 0600)) {
    error_log("Could not secure {$file}");
}

Fallstricke

  • Eigentümerschaft ist entscheidend. Ein Prozess kann chmod() nur für eine Datei aufrufen, die ihm gehört (oder als Superuser). Beim Shared Hosting ist der Webserver-Benutzer oft nicht der Eigentümer, sodass der Aufruf false zurückgibt.
  • umask beeinflusst chmod() nicht. Anders als bei mkdir() und der Dateierstellung setzt chmod() den angegebenen Modus unverändert. Die umask maskiert nur neu erstellte Dateien — siehe umask().
  • Windows ignoriert die meisten Bits. NTFS kennt kein Unix-Berechtigungsmodell; unter Windows ist nur das Schreibschutz-Bit wirklich betroffen.
  • Vor dem Ändern prüfen. Verwenden Sie is_writable(), um den Zugriff zu testen, und fileperms(), um den aktuellen Modus zu lesen, bevor Sie ihn überschreiben.

Verwandte Funktionen

  • fileperms() — liest die aktuellen Berechtigungsbits einer Datei.
  • is_writable() — prüft, ob das Skript in einen Pfad schreiben kann.
  • umask() — setzt die Standardmaske für neu erstellte Dateien.
  • mkdir() — erstellt ein Verzeichnis mit einem bestimmten Modus.

Fazit

chmod() ist Ihr Werkzeug, um den Zugriff auf Dateien und Verzeichnisse aus PHP heraus zu lockern oder zu verschärfen. Drei Regeln verhindern die meisten Fehler: Schreiben Sie den Modus oktal mit führender Null, wählen Sie die kleinstmögliche Berechtigung, die noch funktioniert (0644 für Dateien, 0755 für Verzeichnisse), und prüfen Sie den Rückgabewert, da die Funktion stillschweigend scheitert, wenn Ihr Skript die Zieldatei nicht besitzt.

Übungen

Übung
Was macht die chmod-Funktion in PHP?
Was macht die chmod-Funktion in PHP?
Was this page helpful?