ftp_chmod()
Die PHP-Funktion ftp_chmod() ändert die Berechtigungen einer Datei oder eines Verzeichnisses auf einem Remote-FTP-Server.
Die PHP ftp_chmod()-Funktion
ftp_chmod() ist eine eingebaute PHP-Funktion, die den Berechtigungsmodus einer Datei oder eines Verzeichnisses auf einem Remote-FTP-Server ändert – das FTP-Äquivalent zum Ausführen von chmod über eine Shell. Sie ist Teil der PHP-FTP-Erweiterung und nützlich, wenn ein Deployment- oder Upload-Skript eine Datei nach der Übertragung auf dem Server lesbar, schreibbar oder ausführbar machen muss.
Diese Seite behandelt die Syntax, was der mode-Wert wirklich bedeutet, einen vollständigen Arbeitsablauf, die Behandlung von Rückgabewerten sowie häufige Fallstricke. Wenn Sie neu in der FTP-Erweiterung sind, beginnen Sie mit ftp_connect() und ftp_login().
Syntax
ftp_chmod(FTP\Connection $ftp, int $permissions, string $filename): int|falseDie Parameter sind:
$ftp— das Verbindungs-Handle. Bis PHP 7.4 war dies eineresource, die von ftp_connect() zurückgegeben wurde; seit PHP 8.1 ist es einFTP\Connection-Objekt, das jedoch auf die gleiche Weise verwendet wird.$permissions— der neue Berechtigungsmodus als oktale Ganzzahl (z. B.0644,0755).$filename— der Pfad zur Datei oder zum Verzeichnis, dessen Berechtigungen geändert werden sollen.
Rückgabewert: Bei Erfolg gibt die Funktion die neuen Dateiberechtigungen als Ganzzahl zurück; bei einem Fehler gibt sie false zurück. Vergleichen Sie immer mit ===, damit ein gültiger Modus wie 0 (der falsy ist) nicht mit einem Fehler verwechselt wird.
Warum Berechtigungen in Oktal angegeben werden
Ein häufiger Fehler ist die Übergabe von 644 statt 0644. Das führende 0 bewirkt, dass PHP die Zahl als Oktalzahl liest, was der übliche Weg ist, Unix-Dateiberechtigungen auszudrücken.
<?php
// 0644 (octal) is NOT the same as 644 (decimal)
var_dump(0644); // int(420) -> the value you actually want
var_dump(644); // int(644) -> wrong, this is 1204 in octal
// Each digit is owner / group / others:
// 6 = read + write (4 + 2)
// 4 = read only
// So 0644 means: owner can read & write, group and others can read.Verwenden Sie 0644 für reguläre Dateien, die von allen gelesen, aber nur vom Eigentümer geschrieben werden sollen, und 0755 für Verzeichnisse oder ausführbare Skripte.
Grundlegende Verwendung
Um Berechtigungen zu ändern, verbinden Sie sich zunächst mit ftp_connect(), authentifizieren Sie sich mit ftp_login(), rufen Sie ftp_chmod() auf und schließen Sie dann die Verbindung mit ftp_close().
<?php
// 1. Open a connection to the FTP server
$ftp = ftp_connect('ftp.example.com');
// 2. Log in with your credentials
ftp_login($ftp, 'username', 'password');
// 3. Make the file readable by all, writable by the owner
ftp_chmod($ftp, 0644, '/path/to/file.txt');
// 4. Close the connection
ftp_close($ftp);Den Rückgabewert prüfen
Da der FTP-Server die Anfrage ablehnen kann (falscher Pfad, unzureichende Berechtigungen oder ein Server, der SITE CHMOD nicht unterstützt), sollten Sie den Rückgabewert immer überprüfen:
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'username', 'password');
$result = ftp_chmod($ftp, 0644, '/path/to/file.txt');
if ($result === false) {
echo "Failed to change permissions.\n";
} else {
// $result is the new mode; printf with %o shows it back in octal
printf("Permissions changed to %o successfully.\n", $result);
}
ftp_close($ftp);Bei 0644 gibt dies Permissions changed to 644 successfully. aus – der Formatbezeichner %o wandelt die zurückgegebene Ganzzahl zurück in die vertraute Oktaldarstellung um.
Häufige Fallstricke
ftp_chmod()ist nicht rekursiv. Es betrifft nur einen einzelnen Pfad. Um einen ganzen Verzeichnisbaum zu chmod-en, müssen Sie das Verzeichnis auflisten (siehe ftp_nlist()) undftp_chmod()für jeden Eintrag aufrufen.- Nicht jeder Server unterstützt es.
ftp_chmod()basiert auf dem FTP-BefehlSITE CHMOD, den manche Server (insbesondere viele Windows-IIS-FTP-Server) nicht implementieren. Dort gibt die Funktion einfachfalsezurück. - Oktal, nicht Dezimal übergeben. Wie oben gezeigt, sind
644und0644verschiedene Zahlen. - Die Reihenfolge ist wichtig. Sie müssen eingeloggt sein, bevor Sie
ftp_chmod()aufrufen; der Aufruf auf einer nicht authentifizierten Verbindung schlägt fehl.
Verwandte Funktionen
- ftp_connect() — FTP-Verbindung öffnen.
- ftp_login() — vor jeder Operation authentifizieren.
- ftp_put() / ftp_get() — Dateien hochladen und herunterladen.
- ftp_close() — Verbindung schließen.
- chmod() — Berechtigungen im lokalen Dateisystem ändern.
Zusammenfassung
ftp_chmod() ändert den Berechtigungsmodus einer Remote-Datei oder eines Remote-Verzeichnisses über FTP. Übergeben Sie den Modus als oktale Ganzzahl (0644, 0755), prüfen Sie den Rückgabewert mit === gegen false, und beachten Sie, dass die Operation nur einen einzelnen Pfad betrifft und auf die Server-Unterstützung für SITE CHMOD angewiesen ist.