На сервере RHEL я не могу запустить PhpUnit. Вот примеры с правами суперпользователя, чтобы проиллюстрировать шаги, которые я пытался установить PhpUnit и как он не запускается:
# wget https://phar.phpunit.de/phpunit.phar
# chmod +x phpunit.phar
# ./phpunit --version
PHP Fatal error: require(): Failed opening required 'phar://phpunit-4.3.4.phar/phpunit/TextUI/Command.php' (include_path='.:') in /usr/local/bin/phpunit on line 592
PHP Stack trace:
PHP 1. {main}() /usr/local/bin/phpunit:0
PHP 2. {closure}() /usr/local/bin/phpunit:0
# mv phpunit.phar /usr/local/bin/phpunit
# which phpunit
/usr/local/bin/phpunit
# phpunit --version
PHP Fatal error: require(): Failed opening required 'phar://phpunit-4.3.4.phar/phpunit/TextUI/Command.php' (include_path='.:') in /usr/local/bin/phpunit on line 592
PHP Stack trace:
PHP 1. {main}() /usr/local/bin/phpunit:0
PHP 2. {closure}() /usr/local/bin/phpunit:0
Кажется, что PHP душит phar://
формат адреса, определенный в строке 13:
# cat /usr/local/bin/phpunit | awk 'NR==592'
require __PHPUNIT_PHAR_ROOT__ . $classes[$class];
# cat /usr/local/bin/phpunit | grep -n __PHPUNIT_PHAR_ROOT__
13:define('__PHPUNIT_PHAR_ROOT__', 'phar://phpunit-4.3.4.phar');
592: require __PHPUNIT_PHAR_ROOT__ . $classes[$class];
601: print file_get_contents(__PHPUNIT_PHAR_ROOT__ . '/manifest.txt');
20811: if (defined('__PHPUNIT_PHAR_ROOT__')) {
20812: $prefix = __PHPUNIT_PHAR_ROOT__;
26020: copy(__PHPUNIT_PHAR_ROOT__ . '/ca.pem', $caFile);
Сервер RHEL 6.5:
# uname -a
Linux foobar 2.6.32-220.38.1.el6.x86_64 #1 SMP Wed May 15 08:34:56 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/issue
Red Hat Enterprise Linux Server release 6.5 (Santiago)
Kernel \r on an \m
Решением было просто использовать PHPUnit из PEAR, который также не будет работать с этой ошибкой:
[root@panthercrm ~]# /usr/bin/phpunit
PHP Warning: require_once(File/Iterator/Autoload.php): failed to open stream: No such file or directory in /usr/share/pear/PHPUnit/
Autoload.php on line 64
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpunit:0
PHP 2. require() /usr/bin/phpunit:43
PHP Fatal error: require_once(): Failed opening required 'File/Iterator/Autoload.php' (include_path='.:') in /usr/share/pear/PHPUni
t/Autoload.php on line 64
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpunit:0
PHP 2. require() /usr/bin/phpunit:43
Добавление следующей строки в /etc/php.ini
решена проблема для PEAR-версии PHPUnit:
include_path = ".:/usr/share/pear"
Других решений пока нет …