Signatur
Beschreibung
ftp_site() überträgt einen beliebigen SITE-Befehl an den verbundenen FTP-Server. SITE-Kommandos sind nicht standardisiert und variieren je nach FTP-Server-Implementierung, ermöglichen aber häufig nützliche Operationen, die über die normalen FTP-Befehle hinausgehen.
Ein klassischer Anwendungsfall ist das Setzen von Datei- und Verzeichnisrechten auf Unix/Linux-basierten FTP-Servern mittels SITE CHMOD 0644 datei.txt. Auf Windows-Servern oder anderen Systemen können andere SITE-Befehle verfügbar sein oder der Befehl wird möglicherweise gar nicht unterstützt.
Da das Verhalten stark vom jeweiligen FTP-Server abhängt, sollte der Rückgabewert stets geprüft werden. Bei einem Fehler oder wenn der Server den Befehl ablehnt, gibt die Funktion false zurück.
Für das reine Ändern von Dateirechten steht alternativ ftp_chmod() zur Verfügung, welches direkt auf SITE CHMOD aufbaut und eine bequemere Schnittstelle bietet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine aktive FTP-Verbindungsinstanz, die zuvor mit ftp_connect() oder ftp_ssl_connect() erstellt und mit ftp_login() authentifiziert wurde. |
|
| $command Pflicht | string | Der SITE-Befehl als Zeichenkette, z. B. 'CHMOD 0755 public_html'. Das Schlüsselwort SITE selbst wird nicht vorangestellt – nur der eigentliche Unterbefehl. |
Rückgabewert
true zurück, wenn der Server den SITE-Befehl erfolgreich ausgeführt hat, andernfalls false (z. B. bei unbekanntem Befehl, fehlenden Rechten oder Verbindungsproblemen).Beispiele
Dateirechte per SITE CHMOD setzen
<?php
$ftp = ftp_connect('ftp.example.com');
if ($ftp === false) {
die('Verbindung fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzer', 'geheimesPasswort')) {
die('Anmeldung fehlgeschlagen.');
}
// Dateirechte auf 0644 setzen
$datei = 'uploads/bild.jpg';
if (ftp_site($ftp, 'CHMOD 0644 ' . $datei)) {
echo "Rechte für '$datei' erfolgreich gesetzt.";
} else {
echo "SITE CHMOD-Befehl fehlgeschlagen.";
}
ftp_close($ftp);
SITE UMASK setzen (server-spezifisch)
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzer', 'geheimesPasswort');
// Umask auf 022 setzen (nicht alle Server unterstützen dies)
if (ftp_site($ftp, 'UMASK 022')) {
echo 'UMASK erfolgreich gesetzt.';
} else {
echo 'SITE UMASK wird von diesem Server nicht unterstützt.';
}
ftp_close($ftp);
// Wichtig · Fallstricke
Sicherheitshinweis: Werden Teile des SITE-Kommandos aus Benutzereingaben zusammengesetzt, muss die Eingabe sorgfältig validiert und bereinigt werden, um unerwünschte Befehle oder Pfadmanipulationen zu verhindern. Insbesondere Dateinamen mit Leerzeichen oder Sonderzeichen können zu unerwartetem Verhalten führen.
Kompatibilität: Ab PHP 8.1.0 ist der erste Parameter vom Typ FTP\Connection; in älteren PHP-Versionen wurde eine Ressource (resource) erwartet. Der SITE-Befehl und seine Unterbefehle sind nicht standardisiert – es empfiehlt sich, die Dokumentation des jeweiligen FTP-Servers zu konsultieren.
Für das Ändern von Dateirechten ist ftp_chmod() vorzuziehen, da es eine typsichere, portable Schnittstelle bietet.