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

PHP:getcwd()根据服务器返回不同的结果,php,Php,我正在将站点从一台服务器迁移到另一台服务器。在旧服务器上,getcwd()始终返回脚本正在运行的目录。在新服务器上,在我的一个脚本中,一旦进入函数内部,getcwd()将返回root。但在函数外部,它返回正确的目录。这可能是由于使用了不同的服务器API造成的吗?(旧服务器使用CGI/FastCGI,新服务器使用Apache 2.0处理程序) 编辑:我实际上并不依赖代码中的getcwd(),而是可读的()。我只是在使用getcwd()进行检查,因为有人告诉我is_readable()(它不工作)依

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


编辑:我实际上并不依赖代码中的getcwd(),而是可读的()。我只是在使用getcwd()进行检查,因为有人告诉我is_readable()(它不工作)依赖于cwd。是的,这可能是由于很多原因造成的,包括Apache和PHP的安装方式、使用的API、PHP版本和操作系统的不同。这些事情中至少有一个在服务器之间是不一致的。也有可能(如果不太可能的话)所讨论的函数中发生的任何事情都是导致行为改变的原因(尽管这不能解释为什么在旧服务器上没有发生这种情况)

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


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

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

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


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

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


是几个“神奇常量”之一。

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


是几个“神奇常数”中的一个。

啊,你没有提到在中从FastCGI切换到mod_php!这可能是错误的——Apache在根目录中启动,而FastCGI进行目录更改

你有没有考虑过换回FastCGI?如果因为FastCGI给您带来麻烦而切换到mod_PHP,那么PHP5.3.3+应该非常好。(编辑:啊,我看到你在另一个问题中问了如何。不幸的是,我从未建立FPM,只收获了好处…)


否则,前面的答案仍然适用:使用
\uuuuu DIR\uuuuu
dirname(\uuuu FILE\uuuu)
比依赖cwd要好得多。现在,这样做会破坏您的代码。到目前为止,您可能已经花费了更多的精力来寻找解决方案,而不是仅仅修复它

啊,你没有提到在中从FastCGI切换到mod_php!这可能是错误的——Apache在根目录中启动,而FastCGI进行目录更改

你有没有考虑过换回FastCGI?如果因为FastCGI给您带来麻烦而切换到mod_PHP,那么PHP5.3.3+应该非常好。(编辑:啊,我看到你在另一个问题中问了如何。不幸的是,我从未建立FPM,只收获了好处…)

否则,前面的答案仍然适用:使用
\uuuuu DIR\uuuuu
dirname(\uuuu FILE\uuuu)
比依赖cwd要好得多。现在,这样做会破坏您的代码。到目前为止,您可能已经花费了更多的精力来寻找解决方案,而不是仅仅修复它