2012-05-23 86 views
0

我剛剛在Mac OSX上使用MacPorts安裝了PHP和PEAR,然後使用PEAR安裝了PHPUnit。當我嘗試運行PHPUnit的,我得到了以下錯誤消息:PHPUnit致命錯誤和include_path

$ 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是不是在我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相當陌生,不想以我不明白的方式對其進行修改。)謝謝。

回答

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 

我不知道你是否有類似的問題在一個以上爲您安裝。

做不到這一點,對於我的PHPUnit的批處理文件在Windows 7是

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" %* 
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的作品,雖然我不知道如果我打破了我的設置方面的其他任何東西。

+0

謝謝你的戰利品! – tasmaniski

+0

你可以這樣做來知道你的php.ini在哪裏:'php --ini' – FerCa

+0

這也適用於我。我必須設置'include_path =「。:/ usr/lib/php/pear /'',因爲這是安裝梨的地方(OSX 10.8.2 Mountain Lion) – Nate

1

侵略性較小的方式(不會永久更改php.ini)是在腳本失敗時包含以下行:set_include_path("/opt/local/lib/php/"); 您包含的位置可能略有不同。如果這不起作用,請搜索名爲Autoload.php的文件,該文件位於文件夾結構中,如下所示:File/Iterator/Autoload.php並使用File的路徑作爲set_include_path()中的路徑。