6

I write simple requirements checking script. It checks all required PHP modules installed. I need to check if pcntl is installed. But this module is accessible only in cgi environment and invisible for web queries. extension_loaded('pcntl') and function_exists('pcntl_fork') both return false. How can I perform this check?

WindBridges
  • 693
  • 2
  • 11
  • 23
  • 1
    At the end of the day if `function_exists('pcntl_fork') == false` you can't use `pcntl_fork` – Orangepill Jun 11 '13 at 18:09
  • The problem is that if pcntl is present it still invisible until you run script without server, i.e. /usr/local/bin/php script.php. If you run script such method it will work fine. But if you want to check it from web like http://domain.com/req_check.php - there it will be hidden. – WindBridges Jun 11 '13 at 21:32
  • The you are going to have to create a separate capability fishing script to get the capabilities from the CLI. you should be able to run that one from shell_exec and parse the returned data. – Orangepill Jun 11 '13 at 21:36

4 Answers4

18

Running php -i | grep pcntl will return the following if pcntl is enabled.

pcntl

pcntl support => enabled

TheRealJAG
  • 1,978
  • 20
  • 16
12

If it is installed, the code bellow returns true

var_dump (extension_loaded('pcntl'));
Jack M.
  • 3,676
  • 5
  • 25
  • 36
4

Create a file called cli_supports.php

  <?php
  $supports = array();
  if (function_exists("pcntl_fork")) $supports[] = "pcntl";
  echo implode(",", $supports);
  ?>

Then from your feature detection scripts do.

  $cli_features = explode(",", shell_exec("/usr/local/bin/php ".escapeshellarg(_DIR_."/cli_supports.php")));
Orangepill
  • 24,500
  • 3
  • 42
  • 63
0

If you're sure it's supported (or shared object exists) then check your php.ini and make sure it's loaded as an extension.

extension_loaded() should work (and what I prefer over function_exists()), and the only reason I can imagine it wouldn't is you not loading the shared object.

TLama
  • 75,147
  • 17
  • 214
  • 392
PinBot
  • 13
  • 4