PHP Conference Japan 2024

chdir

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

chdir變更目錄

說明

chdir(字串 $directory): 布林值

將 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 執行緒安全)的情況下建置的,則透過 chdir() 對目前目錄所做的任何更改,作業系統將不會察覺。所有內建的 PHP 函式仍會遵循目前目錄的更改;但使用 FFI 呼叫的外部程式庫函式則不會。您可以使用 php -i 或內建常數 PHP_ZTS 來判斷您的 PHP 副本是否是在啟用 ZTS 的情況下建置的。

參見

新增註釋

使用者貢獻的註釋 1 則註釋

nesk at xakep dot ru
4 年前
在 PHP ZTS 環境下使用 FFI 時,沒有標準方法可以使用程式庫 (dll/so/dylib/etc) 來更改目錄,因此要解決此問題,您應該使用類似此 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