PHP Conference Nagoya 2025

chdir

(PHP 4, PHP 5, PHP 7, PHP 8)

chdirWechseln des Verzeichnisses

Beschreibung

chdir(string $directory): bool

Wechselt das aktuelle Verzeichnis von PHP zu directory.

Parameter-Liste

directory

Das neue aktuelle Verzeichnis

Rückgabewerte

Gibt bei Erfolg true zurück. Bei einem Fehler wird false zurückgegeben.

Fehler/Exceptions

Erzeugt einen Fehler des Levels E_WARNING bei Misserfolg.

Beispiele

Beispiel #1 chdir() Beispiel

<?php

// aktuelles Verzeichnis
echo getcwd() . "\n";

chdir('public_html');

// aktuelles Verzeichnis
echo getcwd() . "\n";

?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

/home/vincent
/home/vincent/public_html

Anmerkungen

Achtung

Wurde der PHP-Interpreter mit ZTS (Zend Thread Safety) kompiliert, sind Änderungen des aktuellen Arbeitsverzeichnisses durch chdir() für das Betriebssystem unsichtbar. Alle eingebauten PHP Funktionen berücksichtigen die Änderung des aktuellen Verzeichnisses, aber externe Bibliotheksfunktionen, die unter Verwendung von FFI aufgerufen werden, nicht. Um festzustellen, ob das verwendete PHP mit ZTS kompiliert wurde, kann php -i oder die eingebaute Konstante PHP_ZTS verwendet werden.

Siehe auch

  • getcwd() - Ermittelt das aktuelle Arbeitsverzeichnis

add a note

User Contributed Notes 1 note

up
9
nesk at xakep dot ru
4 years ago
When working with FFI under a PHP ZTS environment, there is no standard way to change the directory with libraries (dll/so/dylib/etc), so to get around this problem, you should use something like this polyfill:

<?php

$directory
= 'path/to/libraries';

switch (
\PHP_OS_FAMILY) {
case
'Windows':
\FFI::cdef('extern unsigned char SetDllDirectoryA(const char* lpPathName);', 'kernel32.dll')
->
SetDllDirectoryA($directory)
;
break;

case
'Linux':
case
'BSD':
\FFI::cdef('int setenv(const char *name, const char *value, int overwrite);')
->
setenv('LD_LIBRARY_PATH', $directory, 1)
;
break;

case
'Darwin':
\FFI::cdef('int setenv(const char *name, const char *value, int overwrite);')
->
setenv('DYLD_LIBRARY_PATH', $directory, 1)
;
break;
}

?>
To Top