PHP 8.4.1 Released!

chdir

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

chdirCambia directory

Descrizione

chdir(string $directory): bool

Cambia la directory corrente di PHP in directory.

Elenco dei parametri

directory

La nuova directory corrente

Valori restituiti

Restituisce true in caso di successo, false in caso di fallimento.

Errori/Eccezioni

Genera un errore di livello E_WARNING in caso di errore.

Esempi

Example #1 Esempio di chdir()

<?php

// directory corrente
echo getcwd() . "\n";

chdir('public_html');

// directory corrente
echo getcwd() . "\n";

?>

Il precedente esempio visualizzerà qualcosa simile a:

/home/vincent
/home/vincent/public_html

Note

Attenzione

Se l'interprete PHP è stato creato con ZTS (Zend Thread Safety) abilitato, qualsiasi modifica alla directory corrente effettuata tramite chdir() sarà invisibile al sistema operativo. Tutte le funzioni PHP integrate rispetteranno comunque il cambiamento nella directory corrente; ma le funzioni di libreria esterne chiamate usando FFI non lo faranno. Si può verificare se la propria copia di PHP è stata creata con ZTS usando php -i o la costante built-in PHP_ZTS.

Vedere anche:

  • getcwd() - Restituisce la directory di lavoro in uso

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