我最近在Mac上安装了PHPUnit(10.8.3)(运行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
正确列出了包含路径中的pear目录:
.:/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和loaded_ini_file的var_dumps,并打印出正确的信息。所以涉及phpunit的东西没有加载右/任何php.ini。
我没有使用任何与默认配置不同的配置 - 今天就在这台机器上安装了phpunit。
答案 0 :(得分: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版本,并且会导致include路径为空。
另一个要检查的地方是phpunit.xml文件。它有一个部分来指定包含路径。 See here可用选项。我不确定为什么phpunit会重置路径,但这可能是解决问题的一种方法。
答案 1 :(得分:0)
解决方案是:
运行后
`pear config-get php_bin` -i | grep -E Configuration\ File\|include_path
它表明Pear使用的是与php-cli不同的ini路径:
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版本。