chmod în PHP

Schimbă permisiunile unui fișier sau director (cine îl poate citi, scrie sau rula).

Sintaxă
chmod(string $filename, int $permissions): bool

Ce face chmod

Pe Linux, fiecare fișier are permisiuni pentru trei categorii: proprietarul, grupul și restul utilizatorilor. Fiecare cifră octală adună drepturile: 4 = citire, 2 = scriere, 1 = rulare. De exemplu 0644 înseamnă: proprietarul citește și scrie, ceilalți doar citesc.

Valori uzuale pe un site: 0644 pentru fișiere, 0755 pentru directoare, 0600 pentru fișiere cu parole. Doar proprietarul fișierului poate schimba permisiunile. Pe Windows, funcția are efect limitat.

Parametri

Parametru Descriere
$filename Fișierul sau directorul modificat.
$permissions Permisiunile noi, în octal, cu zero în față: 0644.

Ce returnează

true la succes, false la eroare.

Exemple

Exemplul 1: Fișier de configurare citit doar de proprietar

fileperms returnează permisiunile ca număr. Cu %o le afișăm în octal, iar & 0777 păstrează doar cele trei cifre de drepturi.

<?php
file_put_contents("parole.php", "<?php return [];");

chmod("parole.php", 0600);
printf("%o", fileperms("parole.php") & 0777);

Rezultat

600

Exemplul 2: Greșeala cu numărul zecimal

Fără zero în față, 644 este un număr zecimal, egal cu 1204 în octal. Rezultatul are alte drepturi decât cele dorite.

<?php
touch("a.txt");
touch("b.txt");

chmod("a.txt", 0644);
chmod("b.txt", 644);

printf("a.txt: %o\n", fileperms("a.txt") & 0777);
printf("b.txt: %o", fileperms("b.txt") & 0777);

Rezultat

a.txt: 644
b.txt: 204

Greșeli frecvente

  • Scrii chmod($f, 755) în loc de chmod($f, 0755). Fără zero, numărul nu este octal și permisiunile ies greșite.
  • Dai 0777 ca să scapi de o eroare Permission denied. Oricine de pe server poate modifica atunci fișierul. Folosește permisiunile minime necesare.

Comenzi înrudite

  • is_writable / is_readable: Verifică dacă scriptul poate scrie (is_writable) sau citi (is_readable) un fișier sau director.
  • mkdir: Creează un director nou, opțional cu toate directoarele părinte care lipsesc.
  • touch: Creează un fișier gol sau îi actualizează data ultimei modificări.