Start · Sprachen · PHP · Referenz · posix_pathconf

posix_pathconf

Funktion

Gibt den Wert eines konfigurierbaren, pfadbezogenen Systemlimits zurück, wie es durch POSIX definiert ist.

seit PHP 8.3.0 Kategorie: misc

Signatur

posix_pathconf(string $path, int $name): int|false

Beschreibung

posix_pathconf() ruft über den POSIX-Systemaufruf pathconf() konfigurierbare Grenzen oder Optionen ab, die für einen bestimmten Pfad im Dateisystem gelten. Typische Anwendungsfälle sind das Ermitteln der maximalen Länge eines Dateinamens (POSIX_PC_NAME_MAX), der maximalen Pfadlänge (POSIX_PC_PATH_MAX) oder ob symbolische Links unterstützt werden (POSIX_PC_SYMLINK_MAX).

Die Funktion ist sinnvoll, wenn eine Anwendung portabel und robust mit dem Dateisystem interagieren soll, ohne hardkodierte Grenzen zu verwenden. So kann z. B. vor dem Anlegen einer Datei geprüft werden, ob der gewünschte Name die zulässige Maximallänge des jeweiligen Dateisystems nicht überschreitet.

Die verfügbaren Konstanten für den Parameter name sind plattformabhängig und orientieren sich an den POSIX-Standards. Zu den häufig genutzten Konstanten gehören: POSIX_PC_LINK_MAX, POSIX_PC_NAME_MAX, POSIX_PC_PATH_MAX, POSIX_PC_PIPE_BUF, POSIX_PC_CHOWN_RESTRICTED, POSIX_PC_NO_TRUNC und POSIX_PC_ALLOC_SIZE_MIN.

Die Funktion steht nur auf POSIX-kompatiblen Betriebssystemen (Linux, macOS, BSD) zur Verfügung und ist auf Windows nicht verfügbar. Sie erfordert die POSIX-Erweiterung, die standardmäßig in PHP auf Unix-Systemen aktiviert ist.

Parameter

Name Typ Default Beschreibung
$path Pflicht string Der Dateisystempfad (Datei oder Verzeichnis), für den das Limit abgefragt werden soll. Der Pfad muss existieren und zugänglich sein.
$name Pflicht int Eine der vordefinierten POSIX_PC_*-Konstanten, die angibt, welches konfigurierbare Limit abgefragt werden soll, z. B. POSIX_PC_NAME_MAX oder POSIX_PC_PATH_MAX.

Rückgabewert

Typ
int|false
Beschreibung
Gibt den Wert des angeforderten Limits als int zurück. Bei einem Fehler (z. B. ungültiger Pfad oder nicht unterstützte Konstante) wird false zurückgegeben. Ein Rückgabewert von -1 kann bedeuten, dass das Limit nicht definiert ist (was kein Fehler ist).

Beispiele

Maximale Dateinamenlänge eines Verzeichnisses ermitteln

<?php
$path = '/var/www/html';

$maxName = posix_pathconf($path, POSIX_PC_NAME_MAX);

if ($maxName === false) {
    echo 'Fehler beim Abrufen des Limits.' . PHP_EOL;
} else {
    echo "Maximale Dateinamenlänge in '{$path}': {$maxName} Zeichen" . PHP_EOL;
}
Maximale Dateinamenlänge in '/var/www/html': 255 Zeichen

Maximale Pfadlänge abfragen und vor dem Schreiben prüfen

<?php
$baseDir = '/tmp';
$desiredPath = '/tmp/sehr/tief/verschachteltes/verzeichnis/mit/langem/pfad/datei.txt';

$maxPath = posix_pathconf($baseDir, POSIX_PC_PATH_MAX);

if ($maxPath !== false && strlen($desiredPath) > $maxPath) {
    echo 'Fehler: Der Pfad überschreitet das erlaubte Maximum von ' . $maxPath . ' Zeichen.' . PHP_EOL;
} else {
    echo 'Pfadlänge ist zulässig (' . strlen($desiredPath) . ' von max. ' . $maxPath . ' Zeichen).' . PHP_EOL;
    // Datei schreiben ...
}
Pfadlänge ist zulässig (70 von max. 4096 Zeichen).

Alle relevanten POSIX-Pfadlimits eines Verzeichnisses ausgeben

<?php
$path = '/';

$limits = [
    'POSIX_PC_LINK_MAX'          => POSIX_PC_LINK_MAX,
    'POSIX_PC_NAME_MAX'          => POSIX_PC_NAME_MAX,
    'POSIX_PC_PATH_MAX'          => POSIX_PC_PATH_MAX,
    'POSIX_PC_PIPE_BUF'          => POSIX_PC_PIPE_BUF,
    'POSIX_PC_CHOWN_RESTRICTED'  => POSIX_PC_CHOWN_RESTRICTED,
    'POSIX_PC_NO_TRUNC'          => POSIX_PC_NO_TRUNC,
];

foreach ($limits as $name => $const) {
    $value = posix_pathconf($path, $const);
    echo sprintf("%-30s = %s\n", $name, ($value === false ? 'nicht verfügbar' : $value));
}
POSIX_PC_LINK_MAX = 65000 POSIX_PC_NAME_MAX = 255 POSIX_PC_PATH_MAX = 4096 POSIX_PC_PIPE_BUF = 4096 POSIX_PC_CHOWN_RESTRICTED = 1 POSIX_PC_NO_TRUNC = 1

// Wichtig · Fallstricke

Plattformabhängigkeit: posix_pathconf() steht nur auf POSIX-kompatiblen Systemen (Linux, macOS, BSD) zur Verfügung. Auf Windows-Systemen ist die Funktion nicht vorhanden. Prüfe vor dem Einsatz mit function_exists('posix_pathconf').

Eingeführt in PHP 8.3: Die Funktion wurde erst mit PHP 8.3.0 eingeführt. In älteren Versionen kann der gleiche Effekt über posix_fpathconf() (sofern vorhanden) oder direkt über pcntl_*-Erweiterungen approximiert werden.

Rückgabewert -1: Ein Rückgabewert von -1 bedeutet nicht zwingend einen Fehler — er zeigt an, dass das betreffende Limit auf dem System unbegrenzt oder nicht definiert ist. Nutze posix_get_last_error() und posix_strerror() zur Fehlerdiagnose, wenn false zurückgegeben wird.