PHP:如何将当前工作目录设置为执行脚本的目录

25

我正在将我的网站从一个服务器迁移到另一个服务器。 我有一些使用is_readable函数的php脚本,该函数使用当前工作目录。

在旧服务器上,当我调用getcwd()函数时,它输出正在执行脚本的文件夹。在新服务器上,它输出根目录'/'。

我想知道如何配置PHP以使用当前文件夹而不是'/'。我不想更改任何已在旧服务器上运行的PHP代码。我可以配置新服务器,但不知道要更改哪些设置。 如果有帮助,我正在使用apache2。

编辑:看起来我的工作目录并不像我想象的那样是根目录。当我创建一个testFile.php并echo getcwd()时,它显示php文件所在的目录。 但在同一目录中的我的问题文件中,getcwd()显示为'/'。


这两个不同的服务器正在运行不同版本的php,对吗? - klang
1
旧服务器使用5.2版本。 新服务器使用5.3版本。 - MF86
3个回答

32

chdir(__DIR__);

或者

chdir(dirname(__FILE__));

(参见chdir魔术常量)。

但这通常是默认设置。


1
谢谢,但我能把它放在php.ini或某个配置文件中吗?我不想编辑我的现有php代码。 - MF86
@MF86 你不能把它放在你的php.ini文件中。但是你可以把它放在写成纯PHP代码的配置文件中。(例如,一个包含代码如 <?php $config['settingName'] = __DIR__ . 'someValue'; 的配置文件) - nl-x

8

CLI模式下,这是正常的。

它不会将工作目录更改为脚本所在的目录。(-C和--no-chdir开关保持兼容性)

一个快速的解决方法是

chdir(dirname(__FILE__));

谢谢。你知道我怎么退出CLI模式吗? - MF86
@MF86,你为什么首先要参与其中?你的脚本在哪里运行? - Pekka
我不确定我是否是。我的脚本在apache上运行,在我的www文件夹中。 - MF86

2
你可以使用 dirname(__FILE__) 或者 __DIR__(如果版本号>= PHP 5.3) 来获取当前脚本所在的目录。

+1 点赞,不建议使用 chdir,因为它可能会产生意想不到的副作用。最好调整脚本,使其不关心当前工作目录,而不是继续可能出现的奇怪行为。 - Charles
我希望能够在不更改现有脚本的情况下完成此操作。在旧服务器上,getcwd()返回执行脚本的当前目录。 - MF86
如果您需要让您的代码在无法控制配置的机器上运行,您将需要更改您的代码,使其不关心外部配置。__DIR__dirname(__FILE__)可以保证获取文件所在目录而不必关心当前工作目录。 - Charles
我可以控制新机器的配置。 - MF86
哇!这解决了我的整个IIS问题!!我遇到了mage.php未找到的错误。在index.php中添加了以下内容:define('MAGENTO_ROOT', DIR); 谢谢! - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接