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 dechmod($f, 0755). Fără zero, numărul nu este octal și permisiunile ies greșite. - Dai
0777ca să scapi de o eroarePermission 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.