W3docs

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|false

I parametri sono:

  • $ftp — l'handle di connessione. Fino a PHP 7.4 era una resource restituita da ftp_connect(); da PHP 8.1 è un oggetto FTP\Connection, ma si usa nello stesso modo.
  • $permissions — la nuova modalità di permesso come intero ottale (ad esempio 0644, 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 chiamare ftp_chmod() su ogni voce.
  • Non tutti i server la supportano. ftp_chmod() si basa sul comando FTP SITE CHMOD, che alcuni server (in particolare molti server FTP Windows IIS) non implementano. In tal caso restituirà semplicemente false.
  • Passa ottale, non decimale. Come mostrato sopra, 644 e 0644 sono numeri diversi.
  • L'ordine è importante. Devi essere autenticato prima di chiamare ftp_chmod(); chiamarla su una connessione non autenticata fallisce.

Funzioni correlate

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.

Esercitati

Pratica
Qual è l'uso del comando FTP chmod in PHP?
Qual è l'uso del comando FTP chmod in PHP?
Was this page helpful?