if you link your php to /bin/linkedphp and your php is at for ex /home/actual.php
when you run linkedphp in somewhere in your filesystem,
getcwd returns /bin instead of working dir,
solution: use dirname(__FILENAME__) instead
getcwd
(PHP 4, PHP 5)
getcwd — 현재 작업 디렉토리를 얻음
설명
string getcwd
( void
)
현재 작업 디렉토리를 얻습니다.
반환값
성공시엔 현재 작업 디렉토리, 실패시엔 FALSE를 반환합니다.
몇몇 유닉스 종류에서, getcwd()는 부모 디렉토리 중 하나가 읽을 수 없거나 검색 모드 설정이 없는 경우, 현재 디렉토리를 읽을 수 있더라도 FALSE를 반환합니다. 모드와 권한에 대한 자세한 정보는 chmod()를 참고하십시오.
예제
Example #1 getcwd() 예제
<?php
// 현재 디렉토리
echo getcwd() . "\n";
chdir('cvs');
// 현재 디렉토리
echo getcwd() . "\n";
?>
위 예제의 출력 예시:
/home/didou /home/didou/cvs
getcwd
bvidinli at gmail dot com
21-Jan-2009 06:13
21-Jan-2009 06:13
ash at ashmckenzie dot org
19-Nov-2008 10:37
19-Nov-2008 10:37
It appears there is a change in functionality in PHP5 from PHP4 when using the CLI tool. Here is the example: -
cd /tmp
cat > foo.php << END
<?php
print getcwd() . "\n";
?>
END
cd /
php -q /tmp/foo.php
PHP4 returns /tmp
PHP5 returns /
Something to be aware of.
Wolfgang M. Pauli
05-May-2008 11:44
05-May-2008 11:44
If you try to use getcwd() in a directory that is a symbolic link, getcwd() gives you the target of that link (similarly when parent etc. is symbolic link). There might be a better solution, but this worked for me (linux):
<? php
$cwd = exec('pwd');
?>
znupi69NOSPAMHERE at gmail dot com
04-Mar-2008 03:39
04-Mar-2008 03:39
In response to myself: that function will not work for cases like:
/usr/bin$: /home/johndoe/Work/script.php
So here's a better and simpler way (I think this one works for all cases)
<?php
function get_file_dir() {
global $argv;
return realpath($argv[0]);
}
?>
Knock yourself out :)
znupi69NOSPAMHERE at gmail dot com
03-Mar-2008 12:01
03-Mar-2008 12:01
When running PHP on the command line, if you want to include another file which is in the same directory as the main script, doing just
<?php
include './otherfile.php';
?>
might not work, if you run your script like this:
/$ /path/to/script.php
because the current working dir will be set to '/', and the file '/otherfile.php' does not exist, because it is in '/path/to/otherfile.php'.
So, to get the directory in which the script resides, you can use this function:
<?php
function get_file_dir() {
global $argv;
$dir = dirname(getcwd() . '/' . $argv[0]);
$curDir = getcwd();
chdir($dir);
$dir = getcwd();
chdir($curDir);
return $dir;
}
?>
So you can use it like this:
<?php
include get_file_dir() . '/otherfile.php';
// or even..
chdir(get_file_dir());
include './otherfile.php';
?>
Spent some time thinking this one out, maybe it helps someone :)
dale3h
09-Feb-2008 04:18
09-Feb-2008 04:18
In reply to leonbrussels at gmail dot com, the PHP function realpath() does this for you.
leonbrussels at gmail dot com
18-Dec-2007 01:10
18-Dec-2007 01:10
This is a function to convert a path which looks something like this:
/home/www/somefolder/../someotherfolder/../
To a proper directory path:
<?php
function simplify_path($path) {
//saves our current working directory to a variable
$oldcwd = getcwd();
//changes the directory to the one to convert
//$path is the directory to convert (clean up), handed over to the //function as a string
chdir($path);
return gstr_replace('\\', '/', getcwd());
//change the cwd back to the old value to not interfere with the script
chdir($oldcwd);
}
This function is really useful if you want to compare two filepaths which are not necesarily in a "cleaned up" state. It works in *NIX and WINDOWS alike
?>
ab5602 at wayne dot edu
01-Oct-2007 02:33
01-Oct-2007 02:33
If getcwd() returns nothing for you under Solaris with an NFS mounted subdirectory, you are running into an OS bug that is supposedly fixed in recent versions of Solaris 10. This same OS bug effects the include() and require() functions as well.
troy dot cregger at gmail dot com
27-Jan-2007 05:10
27-Jan-2007 05:10
Take care if you use getcwd() in file that you'll need to include (using include, require, or *_once) in a script located outside of the same directory tree.
example:
<?php
//in /var/www/main_document_root/include/MySQL.inc.php
if (strpos(getcwd(),'main_')>0) {
//code to set up main DB connection
}
?>
<?php
//in home/cron_user/maintenance_scripts/some_maintenance_script.php
require_once ('/var/www/main_document_root/include/MySQL.inc.php');
?>
In the above example, the database connection will not be made because the call to getcwd() returns the path relative to the calling script ( /home/cron_user/maintenance_scripts ) NOT relative to the file where the getcwd() function is called.
mark dot phpnetspam at mhudson dot net
04-Nov-2006 06:42
04-Nov-2006 06:42
This function is often used in conjuction with basename(), i.e.
http://www.php.net/manual/en/function.basename.php
hodgman at ali dot com dot au
07-Sep-2006 11:58
07-Sep-2006 11:58
I use this code to replicate the pushd and popd DOS commands in PHP:
<?php
$g_DirStack = array();
function pushd( $dir )
{
global $g_DirStack;
array_push( $g_DirStack, getcwd() );
chdir( $dir );
}
function popd( )
{
global $g_DirStack;
$dir = array_pop( $g_DirStack );
assert( $dir !== null );
chdir( $dir );
}
?>
This allows you to change the current directory with pushd, then use popd to "undo" the directory change when you're done.
emailfire at gmail dot com
08-Dec-2005 11:57
08-Dec-2005 11:57
To get the username of the account:
<?php
$dir = getcwd();
$part = explode('/', $dir);
$username = $part[1];
?>
If current directory is '/home/mike/public_html/' it would return mike.
memandeemail at gmail dot com
07-Dec-2005 08:48
07-Dec-2005 08:48
Some server's has security options to block the getcwd()
Alternate option:
str_replace($_SERVER['SCRIPT_NAME'],'', $_SERVER['SCRIPT_FILENAME']);
marcus at synchromedia dot co dot uk
05-May-2005 12:41
05-May-2005 12:41
"On some Unix variants, getcwd() will return FALSE if any one of the parent directories does not have the readable or search mode set, even if the current directory does."
Just so you know, MacOS X is one of these variants (at least 10.4 is for me). You can make it work by applying 'chmod a+rx' to all folders from your site folder upwards.
vermicin at antispam dot gmail dot com
27-Jan-2005 08:48
27-Jan-2005 08:48
If your PHP cli binary is built as a cgi binary (check with php_sapi_name), the cwd functions differently than you might expect.
say you have a script /usr/local/bin/purge
you are in /home/username
php CLI: getcwd() gives you /home/username
php CGI: getcwd() gives you /usr/local/bin
This can trip you up if you're writing command line scripts with php. You can override the CGI behavior by adding -C to the php call:
#!/usr/local/bin/php -Cq
and then getcwd() behaves as it does in the CLI-compiled version.
manux at manux dot org
22-Jun-2004 01:44
22-Jun-2004 01:44
watch out:
working directory, and thus:
getcwd ()
is "/" while being into a register'ed shutdown function!!!
dave at corecomm dot us
11-Dec-2003 03:14
11-Dec-2003 03:14
getcwd() returns the path of the "main" script referenced in the URL.
dirname(__FILE__) will return the path of the script currently executing.
I had written a script that required several class definition scripts from the same directory. It retrieved them based on filename matches and used getcwd to figure out where they were.
Didn't work so well when I needed to call that first script from a new file in a different directory.
fvu at wanadoo dot nl
24-Nov-2003 10:50
24-Nov-2003 10:50
Make sure to lowercase the result before comparing Windows paths, because this function returns ambiguous results on Windows. From within Apache, the returned path is lowercase, while from the command line interface (CLI) the returned path uses the 'real' Windows pathname. For example, running the 'print getcwd();' command from 'C:\Program Files' returns either
c:\program files (Apache)
C:\Program Files (CLI)
When the directory is specified using chdir(), getcwd() uses the exact chdir argument. For example:
<?php chdir('C:\\PrOgRaM fIlEs'); print getcwd(); ?>
outputs:
C:\PrOgRaM fIlEs (Apache & CLI)
The following code can be used to return a unambiguous lowercased cwd when running on Windows:
<?php $sCwd = (substr(PHP_OS, 0, 3) == 'WIN') ? strtolower(getcwd()) : getcwd(); ?>
raja at rajashahed dot com
07-Nov-2003 03:21
07-Nov-2003 03:21
This is current working directory. X example, your document root is c:\Inetpub\www\htdocs. When You need to know what is your doc_root; /* Like ask yourself your name ;)*/
$_cur_dir = getcwd();
echo "My doc_root is $_cur_dir ";
// it prints out : My doc_root is c:\Inetpub\www\htdocs
/* Usually you need it after using chdir() to know what is
running in current directory */
Regards
Raja
