W3docs

is_readable()

Die is_readable()-Funktion prüft, ob eine Datei lesbar ist, und gibt true zurück, wenn Lesezugriff besteht, andernfalls false.

Die Funktion is_readable() prüft, ob PHP eine bestimmte Datei oder ein Verzeichnis lesen kann, bevor Sie versuchen, sie zu öffnen. Sie stellt fest, ob der Pfad existiert und ob der aktuelle Prozess Leseberechtigung dafür hat. Indem Sie sie zuerst aufrufen, können Sie elegant mit Fehlern umgehen, anstatt eine Laufzeitwarnung von fopen() oder file_get_contents() auszulösen.

Dieses Kapitel behandelt die Syntax, den Rückgabewert, ein ausführbares Beispiel, die häufigsten Fallstricke (Caching, Berechtigungen, Race Conditions) und wie is_readable() mit den anderen PHP-Dateisystemfunktionen zusammenhängt.

Syntax

is_readable(string $filename): bool
TeilBedeutung
$filenamePfad zur zu prüfenden Datei oder zum Verzeichnis. Kann absolut (/var/www/data.txt) oder relativ zum Arbeitsverzeichnis des Skripts sein.
Rückgabewerttrue, wenn der Pfad existiert und vom aktuellen Benutzer/Prozess gelesen werden kann, andernfalls false.

is_readable() funktioniert auch bei Verzeichnissen: Es gibt true zurück, wenn das Verzeichnis geöffnet und aufgelistet werden kann.

Einfaches Beispiel

php— editable, runs on the server

Die Funktion gibt einen boolean-Wert zurück, sodass sie sich natürlich in einer if-Bedingung lesen lässt: Sie verzweigen danach, ob die Datei gelesen werden kann, ohne sie jemals zu öffnen.

Ein eigenständiges, ausführbares Beispiel

Das obige Beispiel zeigt auf einen Pfad, der möglicherweise nicht existiert. Hier ist eine Version, die Sie überall ausführen können — sie erstellt eine Datei, prüft sie und prüft dann einen nicht existierenden Pfad:

<?php

// Create a temp file we know is readable.
$file = tempnam(sys_get_temp_dir(), 'demo');
file_put_contents($file, 'hello');

var_dump(is_readable($file));            // bool(true)
var_dump(is_readable('/no/such/file'));  // bool(false)

unlink($file); // clean up

Der erste Aufruf ergibt true, weil die Datei existiert und wir sie gerade mit unseren eigenen Berechtigungen erstellt haben; der zweite ergibt false, weil der Pfad überhaupt nicht existiert.

Einen Dateilesezugriff absichern

Der typische Einsatz in der Praxis ist eine Absicherung vor dem Lesen, damit eine fehlende oder nicht lesbare Datei keine Warnung auslöst:

<?php

$path = 'config.json';

if (!is_readable($path)) {
    // Handle the problem your way: log, default, or throw.
    throw new RuntimeException("Cannot read config file: $path");
}

$config = json_decode(file_get_contents($path), true);

Häufige Fallstricke

  • Ergebnisse werden gecacht. PHP speichert Stat-Informationen pro Anfrage. Wenn Sie die Berechtigungen einer Datei während desselben Skriptlaufs ändern, rufen Sie clearstatcache() auf, bevor Sie erneut prüfen, da Sie sonst ein veraltetes Ergebnis erhalten können.
  • true ist keine Garantie. Berechtigungen können sich zwischen der Prüfung und dem tatsächlichen Lesen ändern (eine Time-of-Check-to-Time-of-Use-Race-Condition). Für sicherheitskritischen Code sollten Sie einfach den Lesevorgang versuchen und den Fehler behandeln, anstatt sich allein auf is_readable() zu verlassen.
  • Gibt false für nicht existierende Pfade zurück — ohne Warnung. is_readable() dient also gleichzeitig als „Existiert der Pfad und kann ich ihn lesen?"-Prüfung. Um die Existenz unabhängig von Berechtigungen zu testen, verwenden Sie file_exists().
  • Berechtigungen werden für den Webserver-Benutzer ausgewertet (oft www-data), nicht für Ihren Shell-Benutzer, wenn das Skript unter einem Webserver läuft.

Verwandte Funktionen

  • is_writable() — das Gegenstück für Schreibberechtigungen.
  • is_file() — prüft, ob der Pfad eine reguläre Datei ist (kein Verzeichnis).
  • file_exists() — prüft die Existenz, ohne die Leseberechtigung zu berücksichtigen.
  • fopen() und file_get_contents() — die Funktionen, die Sie typischerweise mit is_readable() absichern.

Fazit

is_readable() ist eine leichtgewichtige, nebenwirkungsfreie Möglichkeit zu prüfen, ob ein Pfad existiert und gelesen werden kann, bevor Sie ihn öffnen. Verwenden Sie sie als Absicherung für ein elegantes Fehlerhandling, denken Sie daran, dass ihre Ergebnisse innerhalb einer Anfrage gecacht werden, und versuchen Sie bei sicherheitskritischem Code den Lesevorgang direkt und behandeln Sie Fehler, anstatt der Prüfung allein zu vertrauen.

Übungen

Übung
Was macht die is_readable()-Funktion in PHP?
Was macht die is_readable()-Funktion in PHP?
Was this page helpful?