1

我在 OS X 10.6 上的 MAMP 下运行 phpunit 时遇到问题。我已经通过 PEAR 安装了 phpunit,它存在于 MAMP 目录中,但是当我在终端中运行 phpunit 时没有任何反应。我猜这是一个路径问题,但作为一个 os x 新手,我不知道如何解决它。当我尝试从 /Applications/MAMP/bin/php5.3/bin 运行它时会发生这种情况

$ phpunit
-bash: /usr/bin/phpunit: No such file or directory
$ ./phpunit
$

该问题看起来与如何使用 MAMP 在 Mac 上安装 phpunit 3.5非常相似,但迄今为止的解决方案还没有奏效。以下是更多系统信息:

phpunit 在 MAMP 中的位置

$ sudo find / -name "phpunit"
/Applications/MAMP/bin/php5.3/bin/phpunit
/Applications/MAMP/bin/php5.3/lib/php/PEAR/phing/tasks/ext/phpunit
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory

可能是这里的问题

$ which php
/usr/bin/php
$ which phpunit
$ which pear
$ which ./pear
./pear
$ which ./phpunit
./phpunit

我的 php.ini 来自 /Applications/MAMP/conf/php5.3/php.ini

include_path = ".:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/bin/php5.3/lib/php/PEAR/"

尝试运行或访问 phing 时会发生同样的问题。

再说一次,我猜问题出在路径设置上,但我不知道如何解决这个问题。

谢谢

戴夫

更新

感谢您的答复。我的 pear 是 1.9.2 pear config show lists

$ ./pear config-show
Configuration (channel pear.php.net):
=====================================
Auto-discover new Channels     auto_discover    <not set>
Default Channel                default_channel  pear.php.net
HTTP Proxy Server Address      http_proxy       <not set>
PEAR server [DEPRECATED]       master_server    pear.php.net
Default Channel Mirror         preferred_mirror pear.php.net
Remote Configuration File      remote_config    <not set>
PEAR executables directory     bin_dir          /Applications/MAMP/bin/php5.3/bin
PEAR documentation directory   doc_dir          /Applications/MAMP/bin/php5.3/lib/php/doc
PHP extension directory        ext_dir          /Applications/MAMP/bin/php5.3/lib/php/extensions
PEAR directory                 php_dir          /Applications/MAMP/bin/php5.3/lib/php/PEAR
PEAR Installer cache directory cache_dir        /tmp/pear/cache
PEAR configuration file        cfg_dir          /Applications/MAMP/bin/php5.3/lib/php/cfg
directory
PEAR data directory            data_dir         /Applications/MAMP/bin/php5.3/lib/php/data
PEAR Installer download        download_dir     /tmp/pear/cache
directory
PHP CLI/CGI binary             php_bin          /Applications/MAMP/bin/php5.3/bin/php
php.ini location               php_ini          /Applications/MAMP/conf/php5.3/php.ini
--program-prefix passed to     php_prefix       <not set>
PHP's ./configure
--program-suffix passed to     php_suffix       <not set>
PHP's ./configure
PEAR Installer temp directory  temp_dir         /tmp/pear/temp
PEAR test directory            test_dir         /Applications/MAMP/bin/php5.3/lib/php/test
PEAR www files directory       www_dir          /Applications/MAMP/bin/php5.3/lib/php/www
Cache TimeToLive               cache_ttl        3600
Preferred Package State        preferred_state  stable
Unix file mask                 umask            22
Debug Log Level                verbose          1
PEAR password (for             password         <not set>
maintainers)
Signature Handling Program     sig_bin          /usr/local/bin/gpg
Signature Key Directory        sig_keydir       /Applications/MAMP/conf/php5.3/pearkeys
Signature Key Id               sig_keyid        <not set>
Package Signature Type         sig_type         gpg
PEAR username (for             username         <not set>
maintainers)
User Configuration File        Filename         /Users/dave/.pearrc
System Configuration File      Filename         /Applications/MAMP/conf/php5.3/pear.conf'

/Applications/MAMP/bin/php5.3/bin 的 ls -al 列出 phpunit 等

-rwxr-xr-x   1 dave  admin       920  6 Apr 19:55 phing
-r-xr-xr--@  1 dave  admin  57583340 16 Feb 16:08 php
-rwxr-xr-x   1 dave  admin      2169  6 Apr 19:48 phpunit

如上所述,php.ini 似乎列出了正确的位置并 echo $PATH 生成

$ echo $PATH
/Applications/MAMP/bin/php5.3/bin:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/bin/php5.3/lib/php/PEAR/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin
4

3 回答 3

3

让我尝试一下“通用 phpunit 安装故障排除列表”。(以前从未写下,所以我无法将您链接到任何东西)。

首先确保

pear version

至少报告pear 1.9.2。如果不是:pear install --force pear/pear并再次检查。如果这不起作用,我剩下的唯一想法就是重新安装梨。见下文。

您将在此过程中收到的任何有关“需要频道升级”的消息都很重要,您应该执行建议的命令。

之后尝试:

pear install phpunit/phpunit --force --alldeps

并重复此操作,直到它停止抱怨缺少频道或频道升级。

即使显示 1.9.2 ,它仍然可能会抱怨需要 PEAR 1.9.2。pear version我只能通过重新安装梨来解决这个问题。

重新安装梨

我发现的唯一方法是通过“另存为...”重新安装将http://pear.php.net/go-pear.phar保存到磁盘并运行php go-pear.phar


还是没有运气?

pear config-show 

并寻找“可执行目录”

如果该目录中没有“phpunit”二进制文件,请重新检查安装是否正常,如果它没有告诉我们错误消息:)

二进制文件在那里但which phpunit不起作用

确保可执行目录在您的 $PATH 中或使用绝对路径查看它是否有效

它执行但有关于缺少组件的错误

确保PEAR directory( php_dir) 是您的 php.ini 的 include_path


如果您遇到更多麻烦,请告诉我/我们出了什么问题,我会尝试调整答案。

于 2011-04-08T08:27:35.053 回答
1

I installed PHPUnit on MAMP without PEAR, I think it works. Here's how:

Chances are, you have git installed already. If not, http://help.github.com/mac-set-up-git/

Follow the instructions on this github page: https://github.com/sebastianbergmann/phpunit/ - copying from that page (8 April 2010):

mkdir phpunit && cd phpunit
git clone git://github.com/sebastianbergmann/phpunit.git
git clone git://github.com/sebastianbergmann/dbunit.git
git clone git://github.com/sebastianbergmann/php-file-iterator.git
git clone git://github.com/sebastianbergmann/php-text-template.git
git clone git://github.com/sebastianbergmann/php-code-coverage.git
git clone git://github.com/sebastianbergmann/php-token-stream.git
git clone git://github.com/sebastianbergmann/php-timer.git
git clone git://github.com/sebastianbergmann/phpunit-mock-objects.git
git clone git://github.com/sebastianbergmann/phpunit-selenium.git

Copy and paste that to terminal. That should give you a phpunit folder with phpunit and all the dependencies inside. The next instruction is to copy all the folders into your php include_path. Find out where your include_path is in your php.ini file. You're using MAMP, so it should be something like /Applications/MAMP/conf/php5.3/php.ini. Usually the include_path for MAMP is this:

include_path = ".:/Applications/MAMP/bin/php5.3/lib/php"

However you cannot just copy and paste the folder, you have to tediously figure out which folder to copy. You can know this by reading the package.xml file of each folder. Start with phpunit:

<dir name="/">
    <dir name="PHPUnit">
    ...
    </dir>
    <file baseinstalldir="/" name="ChangeLog.markdown" role="doc"/>
    <file baseinstalldir="/" name="LICENSE" role="doc"/>
    <file baseinstalldir="/" name="README.markdown" role="doc"/>
    <file baseinstalldir="/" name="phpunit.php" role="script">
        ...
    </file>
    <file baseinstalldir="/" name="phpunit.bat" role="script">
        ...
    </file>
</dir>

So you copy the the PHPUnit folder, LICENSE, README.markdown, phpunit.php, phpunit.bat to your include_path. After this, move to dbunit folder, php-file-iterator folder, and so on and so forth. It's a bit tedious.

Make sure you DON'T REPLACE ANY FOLDER, OSX really replaces each folder (instead of merging like any sane person would), so if the folder already exists, it copy only the new folder/files. You should be able to figure out which folder to copy easily by a bit of logic.

After this, copy phpunit.php to any folder, then edit the first line:

#!/usr/bin/env php

to:

#!/usr/bin/env /Applications/MAMP/bin/php5.3/bin/php

Change the permission of phpunit.php so that we can execute it:

chmod 744 phpunit.php

You should be able to run it like this:

./path/to/phpunit.php testCase.php

Hope this helps.


If you wanted to upgrade PEAR or learn something about it's quirkiness when used in MAMP OSX, there's a good discussion here:

https://serverfault.com/questions/184741/upgrading-pear-from-1-9-0-to-1-9-1-fails


Old discussion on installing PHPUnit without PEAR:

How do you install PHPUnit without using PEAR on Mac OS X 10.5?

于 2011-04-08T13:14:09.310 回答
0

我确实遇到了类似的问题,感谢这个帖子我设法解决了它。我是这样做的:遵循edorian的建议:

重新安装梨

我发现的唯一方法是通过“另存为...”重新安装将 http://pear.php.net/go-pear.phar保存到磁盘并运行 php go-pear.phar

然后打电话pear config-show来看这个:

Configuration (channel pear.php.net):
=====================================
Auto-discover new Channels     auto_discover    <not set>
Default Channel                default_channel  pear.php.net
HTTP Proxy Server Address      http_proxy       <not set>
PEAR server [DEPRECATED]       master_server    pear.php.net
Default Channel Mirror         preferred_mirror pear.php.net
Remote Configuration File      remote_config    <not set>
PEAR executables directory     bin_dir          /Users/mbritto/pear/bin
PEAR documentation directory   doc_dir          /Users/mbritto/pear/docs
PHP extension directory        ext_dir          /Applications/MAMP/bin/php5.3/lib/php/extensions
PEAR directory                 php_dir          /Users/mbritto/pear/share/pear
PEAR Installer cache directory cache_dir        /tmp/pear/cache
PEAR configuration file        cfg_dir          /Users/mbritto/pear/cfg
directory
PEAR data directory            data_dir         /Users/mbritto/pear/data
PEAR Installer download        download_dir     /tmp/pear/install
directory
PHP CLI/CGI binary             php_bin          /Applications/MAMP/bin/php5.3/bin/php
php.ini location               php_ini          /Applications/MAMP/conf/php5.3/php.ini
--program-prefix passed to     php_prefix       <not set>
PHP's ./configure
--program-suffix passed to     php_suffix       <not set>
PHP's ./configure
PEAR Installer temp directory  temp_dir         /tmp/pear/install
PEAR test directory            test_dir         /Users/mbritto/pear/tests
PEAR www files directory       www_dir          /Users/mbritto/pear/www
Cache TimeToLive               cache_ttl        3600
Preferred Package State        preferred_state  stable
Unix file mask                 umask            22
Debug Log Level                verbose          1
PEAR password (for             password         <not set>
maintainers)
Signature Handling Program     sig_bin          /usr/local/bin/gpg
Signature Key Directory        sig_keydir       /Applications/MAMP/conf/php5.3/pearkeys
Signature Key Id               sig_keyid        <not set>
Package Signature Type         sig_type         gpg
PEAR username (for             username         <not set>
maintainers)
User Configuration File        Filename         /Users/mbritto/.pearrc
System Configuration File      Filename         /Applications/MAMP/conf/php5.3/pear.conf

我可以看到有两个配置文件,一个用于系统,一个用于用户(请参见 config-show.xml 的底部)。

我备份了我的用户 conf 文件并将其替换为系统文件。然后我需要将 php_ini 设置设置为 /Applications/MAMP/conf/php5.3/php.ini (系统配置文件中似乎不存在)。

之后我的 phpunit 又工作了!谢谢大家 :)

于 2011-04-14T14:43:29.550 回答