0

我刚刚使用 MacPorts 在我的 Mac OSX 上安装了 PHP 和 PEAR,然后使用 PEAR 安装了 PHPUnit。当我尝试运行 PHPUnit 时,我收到以下错误消息:

$ phpunit StackTest.php
PHP Warning:  require_once(File/Iterator/Autoload.php): failed to open stream: No such file or directory in /opt/local/lib/php/PHPUnit/Autoload.php on line 45

Warning: require_once(File/Iterator/Autoload.php): failed to open stream: No such file or directory in /opt/local/lib/php/PHPUnit/Autoload.php on line 45
PHP Fatal error:  require_once(): Failed opening required 'File/Iterator/Autoload.php' (include_path='.:/php/includes:/usr/local/php5/lib/php:/opt/local/lib/php/pear') in /opt/local/lib/php/PHPUnit/Autoload.php on line 45

Fatal error: require_once(): Failed opening required 'File/Iterator/Autoload.php' (include_path='.:/php/includes:/usr/local/php5/lib/php:/opt/local/lib/php/pear') in /opt/local/lib/php/PHPUnit/Autoload.php on line 45

好的,所以文件File/Iterator/Autoload.php不在 my 中include_path,所以我尝试了

$ ls -l /opt/local/lib/php/File/Iterator/Autoload.php
-rw-r--r--  1 root  admin  2682 May 23 14:38 /opt/local/lib/php/File/Iterator/Autoload.php

$ phpunit --include-path /opt/local/lib/php StackTest.php
PHP Warning:  require_once(File/Iterator/Autoload.php): failed to open stream: No such file or directory in /opt/local/lib/php/PHPUnit/Autoload.php on line 45

Warning: require_once(File/Iterator/Autoload.php): failed to open stream: No such file or directory in /opt/local/lib/php/PHPUnit/Autoload.php on line 45
PHP Fatal error:  require_once(): Failed opening required 'File/Iterator/Autoload.php' (include_path='.:/php/includes:/usr/local/php5/lib/php:/opt/local/lib/php/pear') in /opt/local/lib/php/PHPUnit/Autoload.php on line 45

Fatal error: require_once(): Failed opening required 'File/Iterator/Autoload.php' (include_path='.:/php/includes:/usr/local/php5/lib/php:/opt/local/lib/php/pear') in /opt/local/lib/php/PHPUnit/Autoload.php on line 45

它仍然无法正常工作,并且它不包括它应该是的新路径。有人知道我能做些什么吗?(如果我能提供帮助,我宁愿不修改我的php.ini文件,因为它是只读的,而且我对 PHP 还很陌生,不想以我不理解的方式破坏它。)谢谢。

4

3 回答 3

3

仍然没有答案为什么--include-path命令行不起作用,所以这就是我所做的:

$ which phpunit
/opt/local/bin/phpunit

$ sudo emacs /opt/local/bin/phpunit

计划是修改php.ini文件,所以首先我必须弄清楚哪个php.ini是正在初始化phpunit的 . 如果有人有更好的方法来做到这一点,我很高兴听到。phpunit我在开始标记之后添加了以下行到代码中<?php

echo php_ini_loaded_file();

现在,当我运行时phpunit,我得到以下(此处截断)输出:

/opt/local/etc/php5/php.iniPHP Warning:  require_once(File/Iterator/Autoload.php): failed to open stream: No such file or directory in /opt/local/lib/php/PHPUnit/Autoload.php on line 45...

然后:

$ sudo emacs /opt/local/etc/php5/php.ini

我搜索了include_path指令并附:/opt/local/lib/php加到末尾。所以现在,phpunit工作,虽然我不知道我是否在我的设置方面破坏了其他任何东西。

于 2012-05-28T15:12:40.113 回答
1

一种侵入性较小的方法(不永久更改 php.ini)是在失败的脚本中包含以下行:set_include_path("/opt/local/lib/php/"); 您包含的位置可能略有不同。如果这不起作用,请在如下文件夹结构中搜索名为 Autoload.php 的文件:File/Iterator/Autoload.php 并使用 File 的路径作为set_include_path().

于 2013-05-07T19:11:25.830 回答
1

我在安装 Windows 时遇到了类似的问题,但我不确定在 OSX 上是否存在同样的问题。我发现 PEAR 安装在用于启动程序的批处理文件中创建了错误的路径。

标准安装会导致安装的批处理文件出现错误。pear.bat 批处理文件的最后一个脚本行需要将 include_path 括在单引号中 ("include_path='%VARIABLE%'")。

我所做的更改是:

"%PHP_PEAR_PHP_BIN%" -C -d memory_limit="-1" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d auto_append_file="" -d variables_order=EGPCS -d open_basedir="" -d output_buffering=1 -d "include_path='%PHP_PEAR_INSTALL_DIR%'" -f "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9

我不确定您在安装时是否遇到与上述问题类似的问题。

如果做不到这一点,我在 Windows 7 上的 PHPUnit 批处理文件是

if "%PHPBIN%" == "" set PHPBIN=C:\Program Files (x86)\PHP\php.exe
if not exist "%PHPBIN%" if "%PHP_PEAR_PHP_BIN%" neq "" goto USE_PEAR_PATH
GOTO RUN
:USE_PEAR_PATH
set PHPBIN=%PHP_PEAR_PHP_BIN%
:RUN
"%PHPBIN%" "C:\Program Files (x86)\PHP\phpunit" %*
于 2012-05-24T20:06:17.383 回答