【发布时间】:2014-03-15 23:25:16
【问题描述】:
我在 Mac OS 上使用XAMPP,尝试使用PHPUnit 的代码覆盖率检查,这需要XDebug。 xdebug.so 文件随 XAMPP 一起提供,所以我为 PHP 启用了 Xdebug:
// /Applications/XAMPP/xamppfiles/etc/php.ini
[xdebug]
zend_extension="/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so"
xdebug.remote_enable=1
现在,当我从 Web 服务器检查时,phpinfo() 的输出中有一个 Xdebug 部分。
但是当我尝试检查代码覆盖率时,我得到一个错误:
$ phpunit --coverage-html report
PHPUnit 3.7.31 by Sebastian Bergmann.
The Xdebug extension is not loaded. No code coverage will be generated.
我认为 CLI 使用的 php.ini 与 Apache 不同。为了找到 CLI 正在使用的 php.ini 文件,我这样做了:
$ php -i | grep "php.ini"
Configuration File (php.ini) Path => /etc
但是没有/etc/php.ini所以我复制了一个:
$ sudo cp /Applications/XAMPP/xamppfiles/etc/php.ini /etc/php.ini
现在我正在检查 php -m 的模块,但没有 Xdebug 并且我收到此错误:
$ php -m
Failed loading /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so: dlopen(/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so, 9): Symbol not found: _zend_execute_ex
Referenced from: /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so
Expected in: flat namespace
in /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so
[PHP Modules]
bcmath
bz2
...
这是my php.ini file的内容(检查最后几行。)
你能告诉我如何为 PHPUnit 和 CLI 启用 Xdebug 吗?
【问题讨论】:
-
奇怪,最后一个错误看起来像是二进制不兼容。
-
临时解决方案:我已将 /usr/bin/php 重命名为 /usr/bin/phpp 然后
ln -s /Applications/XAMPP/xamppfiles/bin/php /usr/bin/php -
我一直不明白为什么人们使用那些 xampp 包。我看到很多设置问题,以至于我非常怀疑 xampp 是否真的让事情变得更容易。拥有一个包提供基本 Web 开发所需的一切似乎是一件好事。但它一次又一次地表明,使用由正常分发资源提供的包引起的问题更少,因为它们更好地集成到系统中。也就是说,我必须指出,这些好处不适用于 MS-Windows 或 MaxOSX 用户,因为这些系统没有这样优雅的概念。
-
您的临时解决方案并不是真正的临时解决方案,它是正确的答案 (+1)。您的
php命令使用的是内置的 Mac OS X 二进制文件,它的构建与您的 xamp 二进制文件所需的不同。对于有类似问题的人,请运行which php以确保您在命令行上执行预期的二进制文件。 -
您的临时解决方案很危险,将在下次操作系统升级时撤消。应该接受下面的答案,并且您应该始终保留系统文件(包括
/etc/php.ini!)
标签: php phpunit code-coverage xdebug