如何获取调用 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 4PHP 5

以上所有要点都可以解释您遇到的行为。