【问题标题】:PHP: How to set current working directory to be same as directory executing the scriptPHP:如何将当前工作目录设置为与执行脚本的目录相同
【发布时间】:2011-07-12 08:36:48
【问题描述】:

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

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

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

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

【问题讨论】:

标签: php getcwd


【解决方案1】:

这在CLI mode:是正常的

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

一个快速的解决方法是

chdir(dirname(__FILE__));

【讨论】:

  • 谢谢。你知道如何退出 CLI 模式吗?
  • @MF86 你为什么要参与其中?你的脚本在哪里运行?
  • 我不确定我是。我的脚本在我的 www 文件夹中的 apache 上运行。
【解决方案2】:

如果>= PHP 5.3,您可以使用dirname(__FILE__)__DIR__ 获取脚本所在的当前目录。

【讨论】:

  • +1 表示不建议 chdir,这可能会产生不必要的副作用。最好将脚本调整为不关心当前工作目录是什么,而不是继续可能的奇怪行为。
  • 我希望能够在不更改现有脚本的情况下执行此操作。在旧服务器上 getcwd() 返回当前目录执行脚本。
  • 如果您需要您的代码在您无法控制配置的机器上运行,您将需要更改您的代码以完全不关心外部配置。 __DIR__dirname(__FILE__) 保证为您提供文件所在的目录,而无需关心 cwd。
  • 我可以控制新机的配置。
  • 哇!这解决了我在 IIS 上的整个问题!!我没有找到错误 mage.php。在 index.php 中添加了这个 define('MAGENTO_ROOT', DIR);谢谢!
【解决方案3】:

chdir(__DIR__);

chdir(dirname(__FILE__));

(参见chdirmagic constants)。

但这应该是默认的。

【讨论】:

  • 谢谢,但我可以把它放在 php.ini 或一些配置文件中吗?我不想编辑我现有的 php 代码。
  • @MF86 你不能把它放在你的 php.ini 中。但是您可以将它放在以纯 PHP 代码编写的配置文件中。 (例如一个包含<?php $config['settingName'] = __DIR__ . 'someValue';等代码的配置文件)
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多