如何获取调用 PHP 脚本的目录
How to get directory where PHP script was called from
我在某个目录中有一个 PHP 脚本。当我从命令行调用它时,getcwd()、__DIR__
和 exec("pwd") return 脚本本身的目录,而不是 pwd.
例如从 /tmp:
调用 /some/place/test.php
echo(getcwd()); // prints /some/place
echo(exec("pwd")); // prints /some/place
echo(__DIR__); // prints /some/place
echo($_SERVER["PWD"]); // prints /tmp
$_SERVER["PWD"] 具有我需要的值,但文档中未提及 http://php.net/manual/en/reserved.variables.server.php
差点撞到"Post question",猜想是检查命令行参数。 :-)
$ php -h
...
-C Do not chdir to the script's directory
...
对我来说,解决方案是使用 getcwd()。
我的测试结果和你的不一样。
关于$_SERVER['PWD']:
正如他们在 Undefined index 'PWD' in $_server 中解释的那样,使用它很危险。
正如您所说,它没有出现在文档中,并且不能保证它会按预期工作。
关于getcwd():
这是我做过的测试。请考虑 testGetCwd.php
只包含一个 echo getcwd();
。
// working dir: /home/me
// phpfile dir: /var/www/phpfiles
cd /home/me
php /var/www/phpfiles/testGetCwd.php
// echo /home/me
注:
- 使用 chdir
时要小心,因为它会改变 current working directory.
- 功能似乎有变化,从 PHP 4
到 PHP 5
以上所有要点都可以解释您遇到的行为。
我在某个目录中有一个 PHP 脚本。当我从命令行调用它时,getcwd()、__DIR__
和 exec("pwd") return 脚本本身的目录,而不是 pwd.
例如从 /tmp:
调用 /some/place/test.phpecho(getcwd()); // prints /some/place
echo(exec("pwd")); // prints /some/place
echo(__DIR__); // prints /some/place
echo($_SERVER["PWD"]); // prints /tmp
$_SERVER["PWD"] 具有我需要的值,但文档中未提及 http://php.net/manual/en/reserved.variables.server.php
差点撞到"Post question",猜想是检查命令行参数。 :-)
$ php -h
...
-C Do not chdir to the script's directory
...
对我来说,解决方案是使用 getcwd()。
我的测试结果和你的不一样。
关于$_SERVER['PWD']:
正如他们在 Undefined index 'PWD' in $_server 中解释的那样,使用它很危险。
正如您所说,它没有出现在文档中,并且不能保证它会按预期工作。
关于getcwd():
这是我做过的测试。请考虑 testGetCwd.php
只包含一个 echo getcwd();
。
// working dir: /home/me
// phpfile dir: /var/www/phpfiles
cd /home/me
php /var/www/phpfiles/testGetCwd.php
// echo /home/me
注:
- 使用 chdir
时要小心,因为它会改变 current working directory.
- 功能似乎有变化,从 PHP 4
到 PHP 5
以上所有要点都可以解释您遇到的行为。