Giter Site home page Giter Site logo

environment's Introduction

Hi!

I am Sebastian Bergmann. If you develop software using the PHP programming language then you may have come across my name. I am the creator and maintainer of PHPUnit as well as many other libraries and tools that are commonly used.

You cannot buy PHPUnit, but you can pay for PHPUnit. And the best way to do so benefits you, your team, and me: let me help you through consulting, coaching, and training.

Of course, you can also sponsor my work on PHPUnit.


๐Ÿ‘ท Check out what I'm currently working on


๐Ÿ”ญ Latest releases I've contributed to


๐Ÿ“ซ How to reach me

environment's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

environment's Issues

Getting "opcache.save_comments=0 set; annotations will not work"

I get "Warning: opcache.save_comments=0 set; annotations will not work" when running phpunit with phpdbg.

I have opcache.enabled=1, opcache.enabled_cli=0 and opcache.save_comments=0.

Please change the \PHP_SAPI === 'cli' checks to also include \PHP_SAPI === 'phpdbg'.

Thank you

Implement equivalent of PHP_OS_FAMILY (for PHP < 7.2)

Below is the code used in PHP >= 7.2 to define the PHP_OS_FAMILY constant:

#ifdef PHP_WIN32
# define PHP_OS_FAMILY			"Windows"
#elif defined(BSD) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
# define PHP_OS_FAMILY			"BSD"
#elif defined(__APPLE__) || defined(__MACH__)
# define PHP_OS_FAMILY			"Mac"
#elif defined(__sun__)
# define PHP_OS_FAMILY			"Solaris"
#elif defined(__linux__)
# define PHP_OS_FAMILY			"Linux"
#else
# define PHP_OS_FAMILY			"Unknown"
#endif

It would be great if this component had a method that returns the string that would be in PHP_OS_FAMILY on >= PHP 7.2 for versions of PHP < 7.2.

In order to implement this based on PHP_OS, I need to know the output of

$ php -r 'var_dump(PHP_OS);'

run on the following operating systems:

  • Windows (various (currently supported) versions)
  • DragonFly BSD
  • FreeBSD
  • NetBSD
  • OpenBSD
  • macOS X
  • Solaris
  • Linux

Ini setting with special chars breaks parsing

When an ini setting is quoted, for example xdebug.file_link_format = "phpstorm://open?file=%f&line=%l", ini_get will return a simple string without the protection quotes and Runtime::getCurrentSettings will return an invalid unqoted stringxdebug.file_link_format=phpstorm://open?file=%f&line=%l" which will break any test.

PHPUnit\Framework\Exception: PHP:  syntax error, unexpected '=' in Unknown on line 20

We could ensure string settings are wrapped in quotes.

Want to contribute, need pointer on mocking in tests

Hello.

I want to submit a PR, but am not certain how to structure the tests as they with 99% certainty require some level of mocking (php.ini reading) I think.

Are you OK with a more elaborate test setup to allow mocking things or are you comfortable with allowing soft failures in case some INI settings are not adjustable for some test cases? I know this is a relatively small library and adding boilerplate for mocking might seem overkill.

The thing I would like to tackle with my PR is the possibility to have Xdebug enabled, but code coverage disabled, leading to runtime errors when one could instead try PCOV for coverage in that case.

Setting custom PHP Path, especially used for process-isolation in PhpUnit

I run PHPUnit 10 unit tests with process-isolation. I have a custom PHP script ona custom path (which enables xdebug and run as different user by passing it through various su commands). I can start the tests with this custom binary, but all subsquent tests fail, because PhpUnit runs each test isolated, but with the default binary path, which do not have the required parameter and preparations properly set.

I need to define a PHP binary path in PhpUnit which will be used by PhpUnit, instead of the default from the OS.

I have found a way locally, with introducing a constant PHPUNIT_PHP_BINARY_PATH and adding the following code before the line in

if (PHP_BINARY !== '') {

        if (defined('PHPUNIT_PHP_BINARY_PATH')) {
            self::$binary      = escapeshellarg(PHPUNIT_PHP_BINARY_PATH);
            self::$initialized = true;

            return self::$binary;
        }

Maybe this would be better to utilize with a cmdline parameter to make sure it's set before any code is executed.

I would really appriciate this customization for more flexible way to interact with process isolation.

Modernize build automation

  • Use GitHub Actions instead of Travis CI
  • Have Composer in tools/composer and managed through composer self-update (see update-tools target in build.xml
  • Install Psalm using Phive as tools/psalm (phive install --copy psalm)
  • Install PHP-CS-Fixer using Phive as tools/php-cs-fixer (phive install --copy php-cs-fixer)
  • Create Psalm configuration
  • Add Psalm build step to GitHub Actions-based CI workflow
  • Add PHP-CS-Fixer build step to GitHub Actions-based CI workflow

PHP_BINARY can be empty string

When running phpunit through arcanist using @runTestsInSeparateProcesses, PHP_BINARY is '' leading to $runtime->getBinary() returning '' as well.

Warning are thrown for 'stty size'

PHP Warning in Environment that forbidden stty command:

demo-5b72bc:~$ php vendor/phpunit/phpunit/phpunit tests/Unit/ExampleTest.php
PHP Warning:  shell_exec(): Unable to execute 'stty size' in /var/www/demo/vendor/sebastian/environment/src/Console.php on line 93
PHP Fatal error:  Uncaught TypeError: preg_match() expects parameter 2 to be string, boolean given in /var/www/demo/vendor/sebastian/environment/src/Console.php:93
Stack trace:
#0 /var/www/demo/vendor/sebastian/environment/src/Console.php(93): preg_match('#\\d+ (\\d+)#', false, NULL)
#1 /var/www/demo/vendor/sebastian/environment/src/Console.php(70): SebastianBergmann\Environment\Console->getNumberOfColumnsInteractive()
#2 /var/www/demo/vendor/phpunit/phpunit/src/TextUI/ResultPrinter.php(173): SebastianBergmann\Environment\Console->getNumberOfColumns()
#3 /var/www/demo/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(287): PHPUnit\TextUI\ResultPrinter->__construct(NULL, false, 'auto', false, 80, false)
#4 /var/www/demo/vendor/phpunit/phpunit/src/TextUI/Command.php(195): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)
#5 /var/www/demo/vendor/phpunit/phpunit/src/TextUI/Command.php(148): PHPUnit\TextUI\Command->ru in /var/www/demo/vendor/sebastian/environment/src/Console.php on line 93

It is somewhat similar to #16

Overridden ini values are ignored when php.ini uses section headers

As of right now, Runtime::getCurrentSettings() parses php.ini files respecting section headers using the optional $process_sections parameter of parse_ini_file(), however, these section headers are then later ignored when comparing the ini file's values to the value retrieved by ini_get(). This erroneously causes some ini values that have been overridden via the command line to be ignored and don't get passed through if they either don't exist in the ini file or are under a section header:

; php.ini
[xdebug]
xdebug.mode=debug

$config = parse_ini_file($ini, true) results in

array(1) {
  'xdebug' =>
  array(1) {
    'xdebug.mode' =>
    string(5) "debug"
  }
}

$config = parse_ini_file($ini) results in

array(1) {
  'xdebug.mode' =>
  string(5) "debug"
}

Additionally, I believe
if (isset($config[$value]) && $set != $config[$value])
should be changed to
if (!isset($config[$value]) || $set != $config[$value])
as otherwise, values not set in php.ini but set through the command line would also not be passed through.

stty command is executed even if no tty is available

Background is the problem I already reported in sebastianbergmann/phpunit#4029.

isInteractive returns true in git hooks thanks to this check:

$stat = @\fstat(\STDOUT);
// Check if formatted mode is S_IFCHR
return $stat ? 0020000 === ($stat['mode'] & 0170000) : false;

This means getNumberOfColumns will continue to call getNumberOfColumnsInteractive, but due to no actual tty being attached, both stty calls fail with an error.

(P.s. I found this old comment with the exact same problem, but that one got initially fixed by that exact isInteractive call haha)

Wrong usage of stream_isatty(), fstat() used without checking whether the function is available

seems the line 94 makes use of stream_isatty which will always return false (because of the condition at 89). Also, it lacks check if the function exists causes a fatal error on PHP's without the stream support.

if (\function_exists('stream_isatty') && @\stream_isatty($fileDescriptor)) {
return true;
}
// Check if formatted mode is S_IFCHR
if (\function_exists('fstat') && @\stream_isatty($fileDescriptor)) {
$stat = @\fstat(\STDOUT);

Test failures with PHPUnit's own test suite and ^4.0 of this component

$ ./phpunit 
PHPUnit 7.4.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.11 with Xdebug 2.6.1
Configuration: /usr/local/src/phpunit/phpunit.xml

.............................................................   61 / 1989 (  3%)
.............................................................  122 / 1989 (  6%)
.............................................................  183 / 1989 (  9%)
.............................................................  244 / 1989 ( 12%)
.............................................................  305 / 1989 ( 15%)
.............................................................  366 / 1989 ( 18%)
.............................................................  427 / 1989 ( 21%)
.............................................................  488 / 1989 ( 24%)
.............................................................  549 / 1989 ( 27%)
.............................................................  610 / 1989 ( 30%)
.............................................................  671 / 1989 ( 33%)
.............................................................  732 / 1989 ( 36%)
.............................................................  793 / 1989 ( 39%)
.............................................................  854 / 1989 ( 42%)
.............................................................  915 / 1989 ( 46%)
.............................................................  976 / 1989 ( 49%)
............................................................. 1037 / 1989 ( 52%)
............................................................. 1098 / 1989 ( 55%)
............................................................. 1159 / 1989 ( 58%)
............................................................. 1220 / 1989 ( 61%)
............................................................. 1281 / 1989 ( 64%)
............................................................. 1342 / 1989 ( 67%)
............................................................. 1403 / 1989 ( 70%)
............................................................. 1464 / 1989 ( 73%)
............................................................. 1525 / 1989 ( 76%)
............................................................. 1586 / 1989 ( 79%)
............................................................. 1647 / 1989 ( 82%)
............................................................. 1708 / 1989 ( 85%)
........................FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1769 / 1989 ( 88%)
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF...F....FF...................... 1830 / 1989 ( 92%)
..........................................................FF. 1891 / 1989 ( 95%)
F.F.....FFFFFFFFFFFFFFFSSFFFFFFFFFFF.FFSFSFFFFFFFF.FFFFFFFFFF 1952 / 1989 ( 98%)
FF.FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF                         1989 / 1989 (100%)

Time: 8.07 seconds, Memory: 26.00MB

There were 156 failures:

1) /usr/local/src/phpunit/tests/end-to-end/abstract-test-class.phpt
Failed asserting that string matches format description.
--- Expected
+++ Actual
@@ @@
-PHPUnit %s by Sebastian Bergmann and contributors.
-
-W                                                                   1 / 1 (100%)
-
-Time: %s, Memory: %s
-
-There was 1 warning:
-
-1) Warning
-Cannot instantiate class "AbstractTest".
-
-WARNINGS!
-Tests: 1, Assertions: 0, Warnings: 1.
+Fatal error: Uncaught Error: Undefined constant 'STDIN' in /usr/local/src/phpunit/vendor/sebastian/environment/src/Console.php:55
+Stack trace:
+#0 /usr/local/src/phpunit/src/TextUI/ResultPrinter.php(163): SebastianBergmann\Environment\Console->getNumberOfColumns()
+#1 /usr/local/src/phpunit/src/TextUI/TestRunner.php(310): PHPUnit\TextUI\ResultPrinter->__construct(NULL, false, 'never', false, 80, false)
+#2 /usr/local/src/phpunit/src/TextUI/Command.php(206): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)
+#3 /usr/local/src/phpunit/src/TextUI/Command.php(162): PHPUnit\TextUI\Command->run(Array, true)
+#4 Standard input code(7): PHPUnit\TextUI\Command::main()
+#5 {main}
+  thrown in /usr/local/src/phpunit/vendor/sebastian/environment/src/Console.php on line 55

/usr/local/src/phpunit/src/Framework/Constraint/Constraint.php:112
/usr/local/src/phpunit/src/Framework/Constraint/Constraint.php:60
/usr/local/src/phpunit/src/Framework/Assert.php:1855
/usr/local/src/phpunit/src/Framework/Assert.php:1555
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:277
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:166
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/TextUI/TestRunner.php:622
/usr/local/src/phpunit/src/TextUI/Command.php:206
/usr/local/src/phpunit/src/TextUI/Command.php:162

2) /usr/local/src/phpunit/tests/end-to-end/assertion.phpt
Failed asserting that string matches format description.
--- Expected
+++ Actual
@@ @@
-PHPUnit %s by Sebastian Bergmann and contributors.
-
-F                                                                   1 / 1 (100%)
-
-Time: %s, Memory: %s
-
-There was 1 failure:
-
-1) AssertionExampleTest::testOne
-assert(false) in %sAssertionExample.php:%d
-
-FAILURES!
-Tests: 1, Assertions: 1, Failures: 1.
+Fatal error: Uncaught Error: Undefined constant 'STDIN' in /usr/local/src/phpunit/vendor/sebastian/environment/src/Console.php:55
+Stack trace:
+#0 /usr/local/src/phpunit/src/TextUI/ResultPrinter.php(163): SebastianBergmann\Environment\Console->getNumberOfColumns()
+#1 /usr/local/src/phpunit/src/TextUI/TestRunner.php(310): PHPUnit\TextUI\ResultPrinter->__construct(NULL, false, 'never', false, 80, false)
+#2 /usr/local/src/phpunit/src/TextUI/Command.php(206): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)
+#3 /usr/local/src/phpunit/src/TextUI/Command.php(162): PHPUnit\TextUI\Command->run(Array, true)
+#4 Standard input code(7): PHPUnit\TextUI\Command::main()
+#5 {main}
+  thrown in /usr/local/src/phpunit/vendor/sebastian/environment/src/Console.php on line 55

/usr/local/src/phpunit/src/Framework/Constraint/Constraint.php:112
/usr/local/src/phpunit/src/Framework/Constraint/Constraint.php:60
/usr/local/src/phpunit/src/Framework/Assert.php:1855
/usr/local/src/phpunit/src/Framework/Assert.php:1555
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:277
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:166
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/TextUI/TestRunner.php:622
/usr/local/src/phpunit/src/TextUI/Command.php:206
/usr/local/src/phpunit/src/TextUI/Command.php:162

.
.
.

156) /usr/local/src/phpunit/tests/end-to-end/testdox.phpt
Failed asserting that string matches format description.
--- Expected
+++ Actual
@@ @@
-PHPUnit %s by Sebastian Bergmann and contributors.
-
-BankAccount
- โœ” Balance is initially zero
- โœ” Balance cannot become negative
- โœ” Balance cannot become negative
-
-Time: %s, Memory: %s
-
-OK (3 tests, 3 assertions)
+Fatal error: Uncaught Error: Undefined constant 'STDIN' in /usr/local/src/phpunit/vendor/sebastian/environment/src/Console.php:55
+Stack trace:
+#0 /usr/local/src/phpunit/src/TextUI/ResultPrinter.php(163): SebastianBergmann\Environment\Console->getNumberOfColumns()
+#1 /usr/local/src/phpunit/src/Util/TestDox/CliTestDoxPrinter.php(51): PHPUnit\TextUI\ResultPrinter->__construct(NULL, false, 'never', false, 80, false)
+#2 /usr/local/src/phpunit/src/TextUI/TestRunner.php(310): PHPUnit\Util\TestDox\CliTestDoxPrinter->__construct(NULL, false, 'never', false, 80, false)
+#3 /usr/local/src/phpunit/src/TextUI/Command.php(206): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)
+#4 /usr/local/src/phpunit/src/TextUI/Command.php(162): PHPUnit\TextUI\Command->run(Array, true)
+#5 Standard input code(8): PHPUnit\TextUI\Command::main()
+#6 {main}
+  thrown in /usr/local/src/phpunit/vendor/sebastian/environment/src/Console.php on line 55

/usr/local/src/phpunit/src/Framework/Constraint/Constraint.php:112
/usr/local/src/phpunit/src/Framework/Constraint/Constraint.php:60
/usr/local/src/phpunit/src/Framework/Assert.php:1855
/usr/local/src/phpunit/src/Framework/Assert.php:1555
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:277
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:166
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/TextUI/TestRunner.php:622
/usr/local/src/phpunit/src/TextUI/Command.php:206
/usr/local/src/phpunit/src/TextUI/Command.php:162

--

There were 4 skipped tests:

1) /usr/local/src/phpunit/tests/end-to-end/regression/GitHub/2085-enforce-time-limit-options-via-config-without-invoker.phpt
package phpunit/php-invoker is installed

/usr/local/src/phpunit/src/Runner/PhptTestCase.php:305
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:134
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/TextUI/TestRunner.php:622
/usr/local/src/phpunit/src/TextUI/Command.php:206
/usr/local/src/phpunit/src/TextUI/Command.php:162

2) /usr/local/src/phpunit/tests/end-to-end/regression/GitHub/2085-without-invoker.phpt
package phpunit/php-invoker is installed

/usr/local/src/phpunit/src/Runner/PhptTestCase.php:305
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:134
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/TextUI/TestRunner.php:622
/usr/local/src/phpunit/src/TextUI/Command.php:206
/usr/local/src/phpunit/src/TextUI/Command.php:162

3) /usr/local/src/phpunit/tests/end-to-end/regression/GitHub/2591-separate-function-no-preserve-no-bootstrap-php73.phpt
xdebug loaded

/usr/local/src/phpunit/src/Runner/PhptTestCase.php:305
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:134
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/TextUI/TestRunner.php:622
/usr/local/src/phpunit/src/TextUI/Command.php:206
/usr/local/src/phpunit/src/TextUI/Command.php:162

4) /usr/local/src/phpunit/tests/end-to-end/regression/GitHub/2591-separate-function-no-preserve-no-bootstrap.phpt
xdebug loaded

/usr/local/src/phpunit/src/Runner/PhptTestCase.php:305
/usr/local/src/phpunit/src/Runner/PhptTestCase.php:134
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/Framework/TestSuite.php:750
/usr/local/src/phpunit/src/TextUI/TestRunner.php:622
/usr/local/src/phpunit/src/TextUI/Command.php:206
/usr/local/src/phpunit/src/TextUI/Command.php:162

FAILURES!
Tests: 1989, Assertions: 3454, Failures: 156, Skipped: 4.

Failed test: testCanDetectColorSupport

When running an automated build

PHPUnit 4.3.1 by Sebastian Bergmann.
Configuration read from /builddir/build/BUILD/environment-6288ebbf6fa3ed2b2ff2d69c356fbaaf4f0971a7/phpunit.xml.dist
F.........
Time: 14 ms, Memory: 3.00Mb
There was 1 failure:
1) SebastianBergmann\Environment\ConsoleTest::testCanDetectColorSupport
Failed asserting that false is true.

Of course... (not a tty...)

Proposal: add a "@group tty" so this test can be easily ignored using --exclude-group=tty

Windows terminal width is not always 80 chars

The cmd shell is indeed 80 chars by default. But this does not mean it is always the case:

  • you can change the size of cmd (not user-friendly as it is not about resizing the window, but possible)
  • there is many better terminals for windows, which support arbitrary width.

See https://github.com/symfony/symfony/blob/2.8/src/Symfony/Component/Console/Application.php#L779-L788 for a logic determining it when possible (using 79 as fallback is still a sensible default though)

Fatal error: Uncaught TypeError: trim() expects parameter 1 to be string, boolean given

The reporting:

$ phpunit --check-version
PHPUnit 6.1.1 by Sebastian Bergmann and contributors.

You are using the latest version of PHPUnit.

$ phpunit

Fatal error: Uncaught TypeError: trim() expects parameter 1 to be string, boolean given in phar://[...]/phpunit.phar/sebastian-environment/Console.php:115
Stack trace:
#0 phar://[...]/phpunit.phar/sebastian-environment/Console.php(115): trim(false)
#1 phar://[...]/phpunit.phar/sebastian-environment/Console.php(63): SebastianBergmann\Environment\Console->getNumberOfColumnsWindows()
#2 phar://[...]/phpunit.phar/phpunit/TextUI/ResultPrinter.php(173): SebastianBergmann\Environment\Console->getNumberOfColumns()
#3 phar://[...]/phpunit.phar/phpunit/TextUI/TestRunner.php(282): PHPUnit\TextUI\ResultPrinter->__construct(NULL, false, 'auto', false, 80, false)
#4 phar://[...]/phpunit.phar/phpunit/TextUI/Command.php(209): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)
#5 phar://[...]/phpunit.phar/phpunit/TextUI/Command.php(140): PHPUnit\TextUI\Command->run(Arra in phar://[...]/phpunit.phar/sebastian-environment/Console.php on line 115

Thank you

Warnings are thrown for shell_exec

In some environments, shell_exec is disabled for security reasons. This throws warnings like these from the execution of PHPUnit:

PHP Warning:  shell_exec() has been disabled for security reasons in /home/usr31b/.composer/vendor/sebastian/environment/src/Console.php on line 59
PHP Stack trace:
PHP   1. {main}() /home/usr31b/.composer/vendor/phpunit/phpunit/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /home/usr31b/.composer/vendor/phpunit/phpunit/phpunit:47
PHP   3. PHPUnit_TextUI_Command->run() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:109
PHP   4. PHPUnit_TextUI_TestRunner->doRun() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:158
PHP   5. PHPUnit_TextUI_ResultPrinter->__construct() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:247
PHP   6. SebastianBergmann\Environment\Console->getNumberOfColumns() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/ResultPrinter.php:157
PHP   7. shell_exec() /home/usr31b/.composer/vendor/sebastian/environment/src/Console.php:59

Warning: shell_exec() has been disabled for security reasons in /home/usr31b/.composer/vendor/sebastian/environment/src/Console.php on line 59

Call Stack:
    0.0003     234704   1. {main}() /home/usr31b/.composer/vendor/phpunit/phpunit/phpunit:0
    0.0053     915584   2. PHPUnit_TextUI_Command::main() /home/usr31b/.composer/vendor/phpunit/phpunit/phpunit:47
    0.0053     916208   3. PHPUnit_TextUI_Command->run() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:109
    0.0395    4524288   4. PHPUnit_TextUI_TestRunner->doRun() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:158
    0.0406    4699464   5. PHPUnit_TextUI_ResultPrinter->__construct() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:247
    0.0407    4714464   6. SebastianBergmann\Environment\Console->getNumberOfColumns() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/ResultPrinter.php:157
    0.0408    4714640   7. shell_exec() /home/usr31b/.composer/vendor/sebastian/environment/src/Console.php:59

PHP Warning:  shell_exec() has been disabled for security reasons in /home/usr31b/.composer/vendor/sebastian/environment/src/Console.php on line 63
PHP Stack trace:
PHP   1. {main}() /home/usr31b/.composer/vendor/phpunit/phpunit/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /home/usr31b/.composer/vendor/phpunit/phpunit/phpunit:47
PHP   3. PHPUnit_TextUI_Command->run() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:109
PHP   4. PHPUnit_TextUI_TestRunner->doRun() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:158
PHP   5. PHPUnit_TextUI_ResultPrinter->__construct() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:247
PHP   6. SebastianBergmann\Environment\Console->getNumberOfColumns() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/ResultPrinter.php:157
PHP   7. shell_exec() /home/usr31b/.composer/vendor/sebastian/environment/src/Console.php:63

Warning: shell_exec() has been disabled for security reasons in /home/usr31b/.composer/vendor/sebastian/environment/src/Console.php on line 63

Call Stack:
    0.0003     234704   1. {main}() /home/usr31b/.composer/vendor/phpunit/phpunit/phpunit:0
    0.0053     915584   2. PHPUnit_TextUI_Command::main() /home/usr31b/.composer/vendor/phpunit/phpunit/phpunit:47
    0.0053     916208   3. PHPUnit_TextUI_Command->run() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:109
    0.0395    4524288   4. PHPUnit_TextUI_TestRunner->doRun() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:158
    0.0406    4699464   5. PHPUnit_TextUI_ResultPrinter->__construct() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:247
    0.0407    4714464   6. SebastianBergmann\Environment\Console->getNumberOfColumns() /home/usr31b/.composer/vendor/phpunit/phpunit/src/TextUI/ResultPrinter.php:157
    0.0410    4714824   7. shell_exec() /home/usr31b/.composer/vendor/sebastian/environment/src/Console.php:63

This can be easily solved with a check for the existence of the functions, like this example:

if (function_exists('shell_exec') && preg_match('#\d+ (\d+)#', shell_exec('stty size'), $match) === 1) {
    //...
}

if (function_exists('shell_exec') && preg_match('#columns = (\d+);#', shell_exec('stty'), $match) === 1) {
    //...
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.