Start · Sprachen · PHP · Referenz · ftp_chmod

ftp_chmod

Funktion

Ändert die Zugriffsrechte (Dateiberechtigungen) einer Datei auf einem FTP-Server.

seit PHP 5.0.0 Kategorie: io

Signatur

ftp_chmod(FTP\Connection $ftp, int $permissions, string $filename): int|false

Beschreibung

ftp_chmod() sendet einen SITE CHMOD-Befehl an den FTP-Server und setzt damit die Unix-Dateiberechtigungen der angegebenen Datei. Die Funktion ist das FTP-Äquivalent zur lokalen Funktion chmod() und wird typischerweise verwendet, wenn nach einem Datei-Upload die Zugriffsrechte korrekt gesetzt werden müssen, z. B. damit PHP-Skripte vom Webserver ausgeführt werden dürfen oder Konfigurationsdateien nicht öffentlich lesbar sind.

Der Parameter permissions erwartet einen oktalen Integer-Wert, wie er auch bei chmod() verwendet wird (z. B. 0644 für lesbare Dateien oder 0755 für ausführbare Skripte). Wichtig ist, dabei das führende 0 nicht zu vergessen, damit PHP den Wert als Oktalzahl interpretiert – andernfalls wird ein dezimaler Wert gesendet, was zu falschen Berechtigungen führt.

Die Funktion gibt die neu gesetzten Berechtigungen als Ganzzahl zurück oder false, wenn der Server den Befehl nicht unterstützt oder ein Fehler auftritt. Nicht alle FTP-Server unterstützen SITE CHMOD; in solchen Fällen schlägt die Funktion fehl.

Parameter

Name Typ Default Beschreibung
$ftp Pflicht FTP\Connection Eine aktive FTP-Verbindungsressource, die zuvor mit ftp_connect() oder ftp_ssl_connect() erstellt wurde.
$permissions Pflicht int Die gewünschten Dateiberechtigungen als oktale Ganzzahl, z. B. 0644 oder 0755. Das führende 0 ist zwingend erforderlich, damit PHP die Zahl oktal interpretiert.
$filename Pflicht string Der Pfad zur Datei auf dem FTP-Server (relativ zum aktuellen Verzeichnis oder absolut), deren Berechtigungen geändert werden sollen.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die neu gesetzten Dateiberechtigungen als Ganzzahl zurück, wenn der Befehl erfolgreich ausgeführt wurde. Gibt false zurück, wenn der Server SITE CHMOD nicht unterstützt oder ein sonstiger Fehler auftritt.

Beispiele

Dateiberechtigungen nach Upload setzen

<?php
$ftp = ftp_connect('ftp.example.com');
if (!$ftp) {
    die('Verbindung fehlgeschlagen');
}

if (!ftp_login($ftp, 'benutzername', 'geheimespasswort')) {
    die('Anmeldung fehlgeschlagen');
}

// Datei hochladen
$localFile  = '/var/www/html/script.php';
$remoteFile = '/public_html/script.php';

if (ftp_put($ftp, $remoteFile, $localFile, FTP_BINARY)) {
    echo "Datei erfolgreich hochgeladen.\n";

    // Berechtigungen auf 0644 setzen (Owner: lesen+schreiben, Gruppe/Andere: lesen)
    $result = ftp_chmod($ftp, 0644, $remoteFile);
    if ($result !== false) {
        echo "Berechtigungen erfolgreich gesetzt: " . decoct($result) . "\n";
    } else {
        echo "Fehler: Berechtigungen konnten nicht gesetzt werden.\n";
    }
} else {
    echo "Upload fehlgeschlagen.\n";
}

ftp_close($ftp);
Datei erfolgreich hochgeladen. Berechtigungen erfolgreich gesetzt: 644

Ausführbares Skript mit 0755-Rechten hochladen

<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzername', 'geheimespasswort');

$remoteScript = '/public_html/cgi-bin/myscript.sh';

// Shell-Skript hochladen
ftp_put($ftp, $remoteScript, '/local/path/myscript.sh', FTP_ASCII);

// Ausführungsrechte setzen: Owner rwx, Gruppe rx, Andere rx
$chmod = ftp_chmod($ftp, 0755, $remoteScript);

if ($chmod !== false) {
    printf("Rechte gesetzt: %04o\n", $chmod);
} else {
    echo "SITE CHMOD wird vom Server nicht unterstützt oder Fehler aufgetreten.\n";
}

ftp_close($ftp);
Rechte gesetzt: 0755

// Wichtig · Fallstricke

Oktale Schreibweise beachten: Der häufigste Fehler ist das Weglassen der führenden 0 beim Permissions-Wert. ftp_chmod($ftp, 644, ...) sendet den Dezimalwert 644 statt den Oktalwert 0644 (dezimal 420) und führt zu unerwarteten Berechtigungen auf dem Server.

Server-Kompatibilität: Nicht alle FTP-Server unterstützen den SITE CHMOD-Befehl. Windows-basierte FTP-Server ignorieren Unix-Dateiberechtigungen in der Regel vollständig. Bei Misserfolg gibt die Funktion false zurück und PHP erzeugt eine Warnung.

Sicherheit: Setzen Sie Berechtigungen stets so restriktiv wie möglich. Vermeiden Sie 0777 auf Webservern, da dies jeder Person auf dem System Schreib- und Ausführungsrechte gewährt und ein erhebliches Sicherheitsrisiko darstellt.

Ab PHP 8.1 ist der erste Parameter vom Typ FTP\Connection (Objekt) statt der früheren resource-Ressource.