PHP:getcwd()根据服务器返回不同的结果

时间:2011-03-11 01:31:39

标签: php

我正在将网站从一台服务器迁移到另一台服务器。在旧服务器上,getcwd()始终返回脚本正在运行的目录。在新服务器上,在我的一个脚本中,一旦进入函数,getcwd()返回root。但是在函数外部,它返回正确的目录。这可能是由于使用了不同的服务器API吗? (旧服务器使用CGI / FastCGI,新的使用Apache 2.0处理程序)

编辑:我实际上并不依赖于代码中的getcwd(),而是is_readable()。我只是检查使用getcwd(),因为我被告知is_readable()(它不工作)依赖于cwd

3 个答案:

答案 0 :(得分:3)

如果要获取当前脚本所在的目录,通常最好使用dirname(realpath(__FILE__))而不是getcwd()

__FILE__是几个“魔术常数”中的一个。

答案 1 :(得分:1)

是的,这可能是由于许多因素,包括安装Apache和PHP的方式,使用的API,PHP版本和操作系统的差异。从服务器到服务器,这些内容中至少有一个不一致。也有可能(如果不可能)在所讨论的函数中发生的任何事情是导致行为改变的原因(尽管这不能解释为什么在旧服务器上没有发生这种情况)。

如果您要跨多个服务器部署(或者如果您切换服务器),则可能不应该依赖getcwd()的输出。

新服务器的行为很奇怪,但我不明白为什么会出现问题。

答案 2 :(得分:0)

啊,你没有提到your previous question中从FastCGI到mod_php的转换!这可能是错误的 - Apache从根目录开始,而FastCGI进行目录更改。

您是否考虑过切换回FastCGI? PHP 5.3.3 +的FPM SAPI应该是非常好的,如果你切换到mod_php因为FastCGI给你带来麻烦。 (编辑:啊,我看到你问过一个不同的问题。不幸的是我从来没有设置过FPM,只能获得好处......)

否则之前的答案仍然适用:使用__DIR__dirname(__FILE__)而不是依赖cwd,您的代码要好得多。现在你的代码已经这样做了。你可能花了更多的努力试图找到一个解决方法,而不是现在才修复它。 :)