Start · Sprachen · PHP · Referenz · posix_fpathconf

posix_fpathconf

Funktion

Gibt den Wert eines konfigurierbaren systemabhängigen Limits für einen geöffneten Dateideskriptor zurück.

seit PHP 8.3.0 Kategorie: misc

Signatur

posix_fpathconf(resource|int $fd, int $name): int|false

Beschreibung

posix_fpathconf() fragt systemabhängige Konfigurationswerte für einen bereits geöffneten Dateideskriptor ab. Dies geschieht über den POSIX-Systemaufruf fpathconf(). Die Funktion ist nützlich, wenn zur Laufzeit geprüft werden soll, welche Grenzen das zugrundeliegende Betriebssystem für eine bestimmte Datei oder ein bestimmtes Verzeichnis auferlegt – z. B. die maximale Länge eines Dateinamens oder die maximale Anzahl offener Dateien.

Der Parameter $name gibt an, welche Eigenschaft abgefragt werden soll. Hierzu werden POSIX-Konstanten wie POSIX_PC_NAME_MAX, POSIX_PC_PATH_MAX, POSIX_PC_LINK_MAX usw. verwendet. Die verfügbaren Konstanten entsprechen den auf dem System definierten _PC_*-Konstanten.

Im Gegensatz zu posix_pathconf(), das einen Dateipfad als String erwartet, arbeitet posix_fpathconf() mit einem bereits geöffneten Dateideskriptor. Dies ist vorteilhaft, wenn die Datei ohnehin schon geöffnet ist, da kein zusätzliches Öffnen des Pfades notwendig ist und Race Conditions vermieden werden.

Die Funktion steht nur auf POSIX-kompatiblen Systemen (Linux, macOS, BSD etc.) zur Verfügung und ist nicht unter Windows verfügbar.

Parameter

Name Typ Default Beschreibung
$fd Pflicht resource|int Ein geöffneter Dateideskriptor, entweder als PHP-Stream-Ressource (z. B. von fopen()) oder als ganzzahliger POSIX-Dateideskriptor.
$name Pflicht int Die abzufragende POSIX-Konstante, z. B. POSIX_PC_NAME_MAX, POSIX_PC_PATH_MAX, POSIX_PC_LINK_MAX, POSIX_PC_PIPE_BUF oder POSIX_PC_CHOWN_RESTRICTED.

Rückgabewert

Typ
int|false
Beschreibung
Gibt den konfigurierten Wert als int zurück, oder false, wenn ein Fehler aufgetreten ist oder der Wert für den angegebenen Deskriptor nicht bestimmbar ist. Im Fehlerfall kann posix_get_last_error() den POSIX-Fehlercode liefern.

Beispiele

Maximale Dateinamenslänge für eine geöffnete Datei abfragen

<?php
$fp = fopen('/tmp/testfile.txt', 'w');

if ($fp === false) {
    die('Datei konnte nicht geöffnet werden.');
}

$maxNameLen = posix_fpathconf($fp, POSIX_PC_NAME_MAX);

if ($maxNameLen !== false) {
    echo 'Maximale Dateinamenslänge: ' . $maxNameLen . ' Zeichen';
} else {
    echo 'Fehler: ' . posix_strerror(posix_get_last_error());
}

fclose($fp);
Maximale Dateinamenslänge: 255 Zeichen

Maximale Pfadlänge und Link-Anzahl für ein Verzeichnis ermitteln

<?php
$dir = opendir('/var/www');

if ($dir === false) {
    die('Verzeichnis konnte nicht geöffnet werden.');
}

// Dateideskriptor aus der Ressource ermitteln
$fd = $dir;

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

foreach ($limits as $label => $const) {
    $value = posix_fpathconf($fd, $const);
    if ($value !== false) {
        echo $label . ': ' . $value . PHP_EOL;
    } else {
        echo $label . ': nicht verfügbar' . PHP_EOL;
    }
}

closedir($dir);
POSIX_PC_PATH_MAX: 4096 POSIX_PC_LINK_MAX: 65000 POSIX_PC_NAME_MAX: 255

// Wichtig · Fallstricke

Betriebssystemabhängigkeit: Die Funktion ist ausschließlich auf POSIX-kompatiblen Systemen verfügbar (Linux, macOS, *BSD). Unter Windows existiert diese Funktion nicht und führt zu einem fatalen Fehler, sofern die POSIX-Erweiterung nicht installiert ist.

Verfügbarkeit der Konstanten: Nicht alle POSIX_PC_*-Konstanten sind auf jedem System definiert. Es empfiehlt sich, vor der Verwendung mit defined() zu prüfen, ob die gewünschte Konstante verfügbar ist.

Neu in PHP 8.3: posix_fpathconf() wurde in PHP 8.3.0 eingeführt. In älteren PHP-Versionen muss stattdessen auf posix_pathconf() mit einem Pfad-String zurückgegriffen werden.