Signatur
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
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);
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);
// 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.