0

我最近在 Mac (10.8.3) 上安装了 PHPUnit(运行 PHP 5.4.7)。例如,当我尝试运行测试phpunit testfile.php时,我收到:

Warning: require_once(File/Iterator/Autoload.php): failed to open stream: No such file or
directory in /Users/myusername/pear/share/pear/PHPUnit/Autoload.php on line 64

Fatal error: require_once(): Failed opening required 'File/Iterator/Autoload.php' 
(include_path='.:') in /Users/myusername/pear/share/pear/PHPUnit/Autoload.php on line 64

文件,/Users/myusername/pear/share/pear/File/Iterator/Autoload.php存在。

php.ini正确列出包含路径中的梨目录:

.:/php/includes:/usr/local/apache/lib/php:/Users/myusername/pear/share/pear/

然而,当我var_dump(get_include_path());进入PHPUnit/Autoload.php文件时,它打印出来.:就好像它是空的一样。

php_ini_loaded_file相反,转储 的值,只需返回false.

使用php -i |grep php\.ini并且php --ini只显示一个正在使用/加载的 php.ini:

Configuration File (php.ini) Path => /usr/local/apache/lib
Loaded Configuration File => /usr/local/apache/lib/php.ini

我从命令行运行的一个简单的 test.php 文件中重复了 include_path 的 var_dumps 和 loaded_ini_file,它们打印出正确的信息。因此,与 phpunit 相关的东西没有加载正确的/任何 php.ini。

我没有使用任何不同于默认配置的配置——phpunit 今天刚刚安装在这台机器上。

4

2 回答 2

1

确保您使用的 php.ini 文件是为 cli php 加载的文件。至少在我在 Linux 上安装 PHP 时,我有两个 php.ini 文件,一个位于 /etc/php/cgi-php5.4/php.ini,另一个位于 /etc/php/cli-php5.4/ php.ini。如果更改 cgi 版本,默认情况下不会影响 cli 版本,并且会导致包含路径为空。


另一个需要检查的地方是 phpunit.xml 文件。它有一个部分来指定包含路径。 有关可用选项,请参见此处。我不确定为什么 phpunit 会重置路径,但这可能是解决问题的一种方法。

于 2013-04-02T21:10:04.403 回答
0

解决方案是:

运行后

`pear config-get php_bin` -i | grep -E Configuration\ File\|include_path

它表明 Pear 使用的 ini 路径与 php-cli 不同:

Configuration File (php.ini) Path => /etc
Loaded Configuration File => (none)
include_path => .: => .:

事实证明,Pear 是由 PHP 的原始/默认 Mac OS 副本配置的,而不是我后来安装的自定义版本。

一个可能不是最好的长期快速修复方法是符号链接它试图找到的 ini 文件:

sudo ln -s /usr/local/apache/lib/php.ini /etc/php.ini

之后,phpunit FakeTest命令生效,测试运行。

最终我需要重新安装/重新配置 Pear 以使用我加载的 php 版本。

于 2013-04-03T16:22:46.667 回答