1

(对不起,如果标题不好。我实际上是在尝试完成两件事 - 找出如何在 PHP 中更改当前目录,并修复在 WAMP 上运行的 Simpletest 中的错误。)

我在 EasyPHP(WAMP 变体)上的 Windows 7 本地计算机上运行 SimpleTest(simpletest.org)。

当我运行测试时,根据 getcwd(),目录从本地脚本目录更改回:C:\Program Files (x86)\EasyPHP\apache。

我创建了几个简短的脚本来检查 getcwd() 输出。它们按预期返回当前脚本路径:C:\Users\Burton\Desktop\Sites\dbmover。脚本:

服务器路径/getcwd.php:<? echo getcwd(); require_once('tests/getcwd.php) ?>

服务器路径/测试/getcwd.php:<? echo getcwd(); ?>

两者都返回当前路径:C:\Users\Burton\Desktop\Sites\dbmover

我通过 Simpletest 源进行了搜索,以检查 chdir() 和 chroot() 的使用——这是唯一的方法。Simpletest 不使用 chdir();

还有什么可以改变路径?

对于 Windows 中使用的 Simpletest,这种相对路径问题显然很常见。 stackoverflow 上有这张海报,其他地方的这张海报也有。

有些 认为这个问题是正常的,但我认为这是一个错误。

我自己通过使用 dirname( __FILE__) 来解决它,但我宁愿修复它以使其正常工作。

4

3 回答 3

1

我从来没有使用过simpletest,而且不知道内部情况很难说。但是:调用(exec / system / etc.)的命令可能会影响工作目录。值得注意的一点是 php 的 cgi 版本(不是 sapi cli)将其工作目录更改为脚本的目录,并且可能用于php -l语法检查和其他应用程序。如果这是问题所在,请务必将-C参数传递给它。

于 2010-07-24T16:22:28.883 回答
1

原来路径问题是由 Simpletest 的运行方式引起的。它有一个很酷的特性,叫做“autorun”,它基本上是一个包含文件,位于第一个调用测试的文件的顶部。

它使用在脚本退出之前运行的 register_shutdown_function()。但是,在许多版本的 WAMP 中,此函数运行的路径都是错误的。

我已经针对这个问题提交了一个错误修复

顺便说一句,可以在 PHP 中更改目录的函数是: system() exec() chdir() chroot()

于 2010-07-25T15:42:23.067 回答
0

这听起来更像是一个 include_path 问题。echo get_include_path();揭示什么?

于 2010-07-24T16:16:05.870 回答