ftp_chmod()
La funzione ftp_chmod() è una funzione built-in di PHP che consente di modificare i permessi di un file o directory su un server FTP remoto.
La funzione PHP ftp_chmod()
ftp_chmod() è una funzione built-in di PHP che cambia la modalità dei permessi di un file o directory su un server FTP remoto — l'equivalente FTP dell'esecuzione di chmod da shell. Fa parte dell'estensione FTP di PHP ed è utile quando uno script di deployment o di upload deve rendere un file leggibile, scrivibile o eseguibile sul server dopo averlo trasferito.
Questa pagina tratta la sintassi, il significato reale del valore mode, un flusso di lavoro completo, la gestione del valore restituito e gli errori comuni in cui si incorre. Se sei nuovo all'estensione FTP, inizia da ftp_connect() e ftp_login().
Sintassi
ftp_chmod(FTP\Connection $ftp, int $permissions, string $filename): int|falseI parametri sono:
$ftp— l'handle di connessione. Fino a PHP 7.4 era unaresourcerestituita da ftp_connect(); da PHP 8.1 è un oggettoFTP\Connection, ma si usa nello stesso modo.$permissions— la nuova modalità di permesso come intero ottale (ad esempio0644,0755).$filename— il percorso del file o della directory di cui si vogliono modificare i permessi.
Valore restituito: in caso di successo la funzione restituisce i nuovi permessi del file come intero; in caso di errore restituisce false. Confronta sempre con === in modo che una modalità valida come 0 (che è falsa) non venga scambiata per un errore.
Perché i permessi si scrivono in ottale
Un errore comune è passare 644 invece di 0644. Lo 0 iniziale fa sì che PHP legga il numero come ottale, che è il modo in cui vengono espressi i permessi sui file Unix.
<?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.Usa 0644 per i file normali che devono essere leggibili da tutti ma scrivibili solo dal proprietario, e 0755 per le directory o gli script eseguibili.
Utilizzo di base
Per cambiare i permessi, prima ti connetti con ftp_connect(), ti autentichi con ftp_login(), chiami ftp_chmod(), poi rilasci la connessione con 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);Verifica del risultato
Poiché il server FTP potrebbe rifiutare la richiesta (percorso errato, privilegi insufficienti, o un server che non supporta SITE CHMOD), controlla sempre il valore restituito:
<?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);Per 0644, questo stampa Permissions changed to 644 successfully. — il formato %o converte l'intero restituito nella familiare notazione ottale.
Errori comuni
ftp_chmod()non è ricorsiva. Agisce su un singolo percorso. Per applicare chmod a un intero albero di directory, devi elencare la directory (vedi ftp_nlist()) e chiamareftp_chmod()su ogni voce.- Non tutti i server la supportano.
ftp_chmod()si basa sul comando FTPSITE CHMOD, che alcuni server (in particolare molti server FTP Windows IIS) non implementano. In tal caso restituirà semplicementefalse. - Passa ottale, non decimale. Come mostrato sopra,
644e0644sono numeri diversi. - L'ordine è importante. Devi essere autenticato prima di chiamare
ftp_chmod(); chiamarla su una connessione non autenticata fallisce.
Funzioni correlate
- ftp_connect() — apre la connessione FTP.
- ftp_login() — autenticati prima di qualsiasi operazione.
- ftp_put() / ftp_get() — carica e scarica file.
- ftp_close() — chiude la connessione.
- chmod() — cambia i permessi sul filesystem locale.
Riepilogo
ftp_chmod() cambia la modalità dei permessi di un file o directory remota via FTP. Passa la modalità come intero ottale (0644, 0755), controlla il valore restituito con === rispetto a false, e ricorda che l'operazione riguarda un singolo percorso e dipende dal supporto del server per SITE CHMOD.