PHP 8.4.2 Released!

chdir

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

chdirDizin değiştirir

Açıklama

chdir(string $dizin): bool

PHP'nin geçerli dizinden belirtilen dizin'e geçmesini sağlar.

Bağımsız Değişkenler

dizin

Yeni geçerli dizin.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Hatalar/İstisnalar

Başarısızlaık durumunda E_WARNING seviyesinde bir hata çıktılar.

Örnekler

Örnek 1 - chdir() örneği

<?php

// geçerli dizin
echo getcwd() . "\n";

// değiştirelim
chdir('public_html');

// geçerli dizin
echo getcwd() . "\n";

?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

/home/nilgun
/home/nilgun/public_html

Notlar

Dikkat

PHP yorumlayıcısı ZTS (Zend Thread Safety) etkin kılınarak derlenmişse, geçerli dizinde chdir() ile yapılan değişiklikler işletim sistemine görünmez olacaktır. Yerleşik PHP işlevlerinin tamamı bu değişikliklere uygun davranacak fakat FFI kullanarak çağrılan harici kütüphane işlevleri bu değişiklikleri yok sayacaktır. PHP kopyanızın ZTS etkin kılınarak derlenip derlenmediğini php -i komutunu veya yerleşik PHP_ZTS sabitini kullanarak anlayabilirsiniz.

Ayrıca Bakınız

  • getcwd() - Geçerli çalışma dizinini döndürür

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