CakeFest 2024: The Official CakePHP Conference

chdir

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

chdirMuda o diretório

Descrição

chdir(string $directory): bool

Muda o diretório atual do PHP para directory.

Parâmetros

directory

O novo diretório atual

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Erros/Exceções

Dispara um aviso E_WARNING em caso de falha.

Exemplos

Exemplo #1 Exemplo de chdir()

<?php

// diretório atual
echo getcwd() . "\n";

chdir('public_html');

// diretório atual
echo getcwd() . "\n";

?>

O exemplo acima produzirá algo semelhante a:

/home/vincent
/home/vincent/public_html

Notas

Cuidado

Se o interpretador PHP foi compilado com ZTS (Zend Thread Safety) habilitado, quaisquer mudanças ao diretório atual através de chdir() serão invisíveis ao sistema operacional. Todas as funções internas do PHP ainda irão respeitar a mudança do diretório atual; mas funções de bibliotecas externas, chamadas usando FFI não irão. Pode-se verificar se a cópia do PHP foi compilada com ZTS habilitado usando o comando php -i ou a constante interna PHP_ZTS.

Veja Também

add a note

User Contributed Notes 3 notes

up
9
nesk at xakep dot ru
3 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;
}

?>
up
-14
php dot duke at qik dot nl
15 years ago
When changing dir's under windows environments:

<?php
$path
="c:\temp"';
chdir($path);
/* getcwd() gives you back "c:\temp" */

$path="c:\temp\"'
;
chdir($path);
/* getcwd() gives you back "c:\temp\" */
?>

to work around this inconsistency
doing a chdir('.') after the chdir always gives back "c:\temp"
up
-30
herwin at snt dot utwente dot nl
17 years ago
When using PHP safe mode and trying to change to a dir that is not accessible due to the safe mode restrictions, the function simply fails without generating any kind of error message.

(Tested in PHP 4.3.10-16, Debian Sarge default)
To Top