is_writable / is_readable în PHP

Verifică dacă scriptul poate scrie (is_writable) sau citi (is_readable) un fișier sau director.

Sintaxă
is_writable(string $filename): bool

Ce face is_writable / is_readable

is_writable returnează true dacă fișierul sau directorul există și utilizatorul cu care rulează PHP are drept de scriere. is_readable face același lucru pentru citire. Există și aliasul is_writeable.

Pe un server web, PHP rulează de obicei ca alt utilizator decât tine (de exemplu www-data), deci un director în care poți scrie tu prin FTP poate să nu fie scriibil pentru PHP.

Parametri

Parametru Descriere
$filename Fișierul sau directorul verificat.

Ce returnează

true dacă dreptul există, altfel false (și pentru căi inexistente).

Exemple

Exemplul 1: Fișier protejat la scriere

<?php
file_put_contents("setari.txt", "tema = luminoasa");
var_dump(is_writable("setari.txt"));

chmod("setari.txt", 0444);
var_dump(is_writable("setari.txt"));
var_dump(is_readable("setari.txt"));

Rezultat

bool(true)
bool(false)
bool(true)

Exemplul 2: Verificare înainte de încărcarea fișierelor

<?php
mkdir("uploads");

if (!is_dir("uploads") || !is_writable("uploads")) {
    exit("Directorul uploads lipsește sau nu are drept de scriere.");
}
echo "Gata pentru încărcare";

Rezultat

Gata pentru încărcare

Greșeli frecvente

  • Verifici is_writable pe un fișier care nu există încă. Rezultatul este false. Verifică directorul în care urmează să îl creezi.
  • Testezi scriptul din terminal cu utilizatorul tău, iar pe site PHP rulează cu alt utilizator. Rezultatele pot fi diferite.

Comenzi înrudite

  • chmod: Schimbă permisiunile unui fișier sau director (cine îl poate citi, scrie sau rula).
  • file_exists: Verifică dacă un fișier sau un director există pe disc.
  • is_dir: Verifică dacă o cale indică un director existent.
  • fopen / fclose: Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.