PHP 8.4.2 Released!

chdir

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

chdirディレクトリを変更する

説明

chdir(string $directory): bool

PHP のカレントディレクトリを directory に変更します。

パラメータ

directory

新しいカレントディレクトリ

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

失敗した場合は E_WARNING レベルのエラーが発生します。

例1 chdir() の例

<?php

// カレントディレクトリ
echo getcwd() . "\n";

chdir('public_html');

// カレントディレクトリ
echo getcwd() . "\n";

?>

上の例の出力は、 たとえば以下のようになります。

/home/vincent
/home/vincent/public_html

注意

警告

PHP インタプリタが ZTS (Zend Thread Safety) を有効にしてビルドされている場合、 chdir() 関数を使って行った現在のディレクトリの変更はオペレーティングシステムには見えません。 全てのPHPのビルトイン関数は、現在のディレクトリの変更を尊重しますが、 FFI を使って呼び出された外部ライブラリはそうではありません。 あなたの PHP で ZTS が有効かどうかを調べるには、php -i コマンドを使うか、 ビルトイン定数PHP_ZTS を確認してください。

参考

  • getcwd() - カレントのワーキングディレクトリを取得する

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