PHPKonf 2020 Online

chdir

(PHP 4, PHP 5, PHP 7)

chdirDizin değiştirir

Açıklama

chdir ( string $dizin ) : bool

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

Değiştirgeler

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 add a note

User Contributed Notes 3 notes

up
1
nesk at xakep dot ru
1 month 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
-2
php dot duke at qik dot nl
11 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
-16
herwin at snt dot utwente dot nl
14 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