chdir
(PHP 4, PHP 5)
chdir — Change directory
Description
bool chdir
( string
$directory
)
Changes PHP's current directory to
directory
.
Parameters
-
directory
-
The new current directory
Return Values
Returns TRUE
on success or FALSE
on failure.
Errors/Exceptions
Throws an error of level E_WARNING
on failure.
Examples
Example #1 chdir() example
<?php
// current directory
echo getcwd() . "\n";
chdir('public_html');
// current directory
echo getcwd() . "\n";
?>
The above example will output something similar to:
/home/vincent /home/vincent/public_html
Notes
Note: When safe mode is enabled, PHP checks whether the directory in which the script is operating has the same UID (owner) as the script that is being executed.
Коментарии
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)
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"
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;
}
?>