Как проверить наличие модуля PCNTL

Пишу простой скрипт проверки требований. Он проверяет все необходимые установленные модули PHP. Мне нужно проверить, установлен ли pcntl. Но этот модуль доступен только в среде cgi и невидим для веб-запросов. extension_loaded('pcntl') и function_exists('pcntl_fork') возвращают false. Как я могу выполнить эту проверку?


person WindBridges    schedule 11.06.2013    source источник
comment
В конце концов, если function_exists('pcntl_fork') == false вы не можете использовать pcntl_fork   -  person Orangepill    schedule 11.06.2013
comment
Проблема в том, что если присутствует pcntl, он остается невидимым до тех пор, пока вы не запустите скрипт без сервера, то есть /usr/local/bin/php script.php. Если вы запустите скрипт таким методом, он будет работать нормально. Но если вы хотите проверить это из Интернета, например, domain.com/req_check.php - там это будет скрытый.   -  person WindBridges    schedule 12.06.2013
comment
Вам нужно будет создать отдельный сценарий поиска возможностей, чтобы получить возможности из CLI. вы должны иметь возможность запустить его из shell_exec и проанализировать возвращенные данные.   -  person Orangepill    schedule 12.06.2013


Ответы (4)


Создайте файл с именем cli_supports.php

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

Затем из ваших скриптов обнаружения фич сделайте.

  $cli_features = explode(",", shell_exec("/usr/local/bin/php ".escapeshellarg(_DIR_."/cli_supports.php")));
person Orangepill    schedule 11.06.2013

Если он установлен, приведенный ниже код возвращает true

var_dump (extension_loaded('pcntl'));
person Jack M.    schedule 11.07.2014

Запуск php -i | grep pcntl вернет следующее, если pcntl включен.

pcntl

pcntl support => enabled

person TheRealJAG    schedule 30.10.2018

Если вы уверены, что он поддерживается (или существует общий объект), проверьте свой php.ini и убедитесь, что он загружен как расширение.

extension_loaded() должен работать (и то, что я предпочитаю function_exists()), и единственная причина, по которой я могу представить, что это не так, - это то, что вы не загружаете общий объект.

person PinBot    schedule 25.02.2014