22

I am running PHPUnit in Windows and am trying to install PHPUnit via composer.json:

"phpunit/php-invoker": "*"

...with this dependency, but I am getting this error:

phpunit/php-invoker 1.1.3 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.

How can I install this extension?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Yogesh
  • 727
  • 2
  • 7
  • 19

3 Answers3

19

You can't install the ext-pcntl extension on Windows. According to the PHP documentation:

Currently, this module will not function on non-Unix platforms (Windows).

If you want to install PHPUnit, all you need is the PHPUnit library:

composer require phpunit/phpunit 4.*

You don't need php-invoker to install PHPUnit. But if you also need the php-invoker library, you are out of luck. Try using Vagrant or a plain VM with Linux distributions like Ubuntu, Debian, or Linux Mint.

Aleksander Wons
  • 3,611
  • 18
  • 29
7

If you're running on Windows 10 without Laravel Homestead, you can enable the Linux subsystem and run your code through that.

https://www.windowscentral.com/how-install-bash-shell-command-line-windows-10

Then install the requirements:

sudo apt install php7.2-fpm php7.2-mbstring php7.2-xmlrpc php7.2-soap php7.2-gd php7.2-xml php7.2-cli php7.2-zip php7.2-mysql

This also can run Laravel Envoy and Horizon too which don't work on Windows.

It's a nice lightweight solution.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
FloatingKiwi
  • 4,408
  • 1
  • 17
  • 41
0

You may consider using: --ignore-platform-reqs ext-pcntl when installing via commands.

Further information is at Laravel Horizon, ext-pcntl and Windows.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Waseem Almoliky
  • 771
  • 6
  • 10