Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Runtime.php

class Runtime

Same name in this branch
  1. 11.1.x vendor/phpunit/phpunit/src/Event/Value/Runtime/Runtime.php \PHPUnit\Event\Runtime\Runtime
  2. 11.1.x vendor/composer/composer/src/Composer/Platform/Runtime.php \Composer\Platform\Runtime

Hierarchy

  • class \SebastianBergmann\Environment\Runtime

Expanded class hierarchy of Runtime

6 files declare their use of Runtime
AbstractPhpProcess.php in vendor/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php
BuildInformation.php in vendor/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php
ExcludeList.php in vendor/phpunit/phpunit/src/Util/ExcludeList.php
Facade.php in vendor/phpunit/php-code-coverage/src/Report/Xml/Facade.php
Renderer.php in vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php

... See full list

20 string references to 'Runtime'
Application::writeRuntimeInformation in vendor/phpunit/phpunit/src/TextUI/Application.php
BuildInformation::setRuntimeInformation in vendor/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php
demo_umami_requirements in core/profiles/demo_umami/demo_umami.install
Implements hook_requirements().
file_requirements in core/modules/file/file.install
Implements hook_requirements().
hook_requirements in core/lib/Drupal/Core/Extension/module.api.php
Check installation requirements and do status reporting.

... See full list

File

vendor/sebastian/environment/src/Runtime.php, line 31

Namespace

SebastianBergmann\Environment
View source
final class Runtime {
    private static string $rawBinary;
    private static bool $initialized = false;
    
    /**
     * Returns true when Xdebug or PCOV is available or
     * the runtime used is PHPDBG.
     */
    public function canCollectCodeCoverage() : bool {
        return $this->hasXdebug() || $this->hasPCOV() || $this->hasPHPDBGCodeCoverage();
    }
    
    /**
     * Returns true when Zend OPcache is loaded, enabled,
     * and is configured to discard comments.
     */
    public function discardsComments() : bool {
        if (!$this->isOpcacheActive()) {
            return false;
        }
        if (ini_get('opcache.save_comments') !== '0') {
            return false;
        }
        return true;
    }
    
    /**
     * Returns true when Zend OPcache is loaded, enabled,
     * and is configured to perform just-in-time compilation.
     */
    public function performsJustInTimeCompilation() : bool {
        if (PHP_MAJOR_VERSION < 8) {
            return false;
        }
        if (!$this->isOpcacheActive()) {
            return false;
        }
        if (ini_get('opcache.jit_buffer_size') === '0') {
            return false;
        }
        $jit = ini_get('opcache.jit');
        if ($jit === 'disable' || $jit === 'off') {
            return false;
        }
        if (strrpos($jit, '0') === 3) {
            return false;
        }
        return true;
    }
    
    /**
     * Returns the raw path to the binary of the current runtime.
     */
    public function getRawBinary() : string {
        if (self::$initialized) {
            return self::$rawBinary;
        }
        if (PHP_BINARY !== '') {
            self::$rawBinary = PHP_BINARY;
            self::$initialized = true;
            return self::$rawBinary;
        }
        // @codeCoverageIgnoreStart
        $possibleBinaryLocations = [
            PHP_BINDIR . '/php',
            PHP_BINDIR . '/php-cli.exe',
            PHP_BINDIR . '/php.exe',
        ];
        foreach ($possibleBinaryLocations as $binary) {
            if (is_readable($binary)) {
                self::$rawBinary = $binary;
                self::$initialized = true;
                return self::$rawBinary;
            }
        }
        self::$rawBinary = 'php';
        self::$initialized = true;
        return self::$rawBinary;
        // @codeCoverageIgnoreEnd
    }
    
    /**
     * Returns the escaped path to the binary of the current runtime.
     */
    public function getBinary() : string {
        return escapeshellarg($this->getRawBinary());
    }
    public function getNameWithVersion() : string {
        return $this->getName() . ' ' . $this->getVersion();
    }
    public function getNameWithVersionAndCodeCoverageDriver() : string {
        if ($this->hasPCOV()) {
            return sprintf('%s with PCOV %s', $this->getNameWithVersion(), phpversion('pcov'));
        }
        if ($this->hasXdebug()) {
            return sprintf('%s with Xdebug %s', $this->getNameWithVersion(), phpversion('xdebug'));
        }
        return $this->getNameWithVersion();
    }
    public function getName() : string {
        if ($this->isPHPDBG()) {
            // @codeCoverageIgnoreStart
            return 'PHPDBG';
            // @codeCoverageIgnoreEnd
        }
        return 'PHP';
    }
    public function getVendorUrl() : string {
        return 'https://www.php.net/';
    }
    public function getVersion() : string {
        return PHP_VERSION;
    }
    
    /**
     * Returns true when the runtime used is PHP and Xdebug is loaded.
     */
    public function hasXdebug() : bool {
        return $this->isPHP() && extension_loaded('xdebug');
    }
    
    /**
     * Returns true when the runtime used is PHP without the PHPDBG SAPI.
     */
    public function isPHP() : bool {
        return !$this->isPHPDBG();
    }
    
    /**
     * Returns true when the runtime used is PHP with the PHPDBG SAPI.
     */
    public function isPHPDBG() : bool {
        return PHP_SAPI === 'phpdbg';
    }
    
    /**
     * Returns true when the runtime used is PHP with the PHPDBG SAPI
     * and the phpdbg_*_oplog() functions are available (PHP >= 7.0).
     */
    public function hasPHPDBGCodeCoverage() : bool {
        return $this->isPHPDBG();
    }
    
    /**
     * Returns true when the runtime used is PHP with PCOV loaded and enabled.
     */
    public function hasPCOV() : bool {
        return $this->isPHP() && extension_loaded('pcov') && ini_get('pcov.enabled');
    }
    
    /**
     * Parses the loaded php.ini file (if any) as well as all
     * additional php.ini files from the additional ini dir for
     * a list of all configuration settings loaded from files
     * at startup. Then checks for each php.ini setting passed
     * via the `$values` parameter whether this setting has
     * been changed at runtime. Returns an array of strings
     * where each string has the format `key=value` denoting
     * the name of a changed php.ini setting with its new value.
     *
     * @return string[]
     */
    public function getCurrentSettings(array $values) : array {
        $diff = [];
        $files = [];
        if ($file = php_ini_loaded_file()) {
            $files[] = $file;
        }
        if ($scanned = php_ini_scanned_files()) {
            $files = array_merge($files, array_map('trim', explode(",\n", $scanned)));
        }
        foreach ($files as $ini) {
            $config = parse_ini_file($ini, true);
            foreach ($values as $value) {
                $set = ini_get($value);
                if (empty($set)) {
                    continue;
                }
                if (!isset($config[$value]) || $set !== $config[$value]) {
                    $diff[$value] = sprintf('%s=%s', $value, $set);
                }
            }
        }
        return $diff;
    }
    private function isOpcacheActive() : bool {
        if (!extension_loaded('Zend OPcache')) {
            return false;
        }
        if ((PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') && ini_get('opcache.enable_cli') === '1') {
            return true;
        }
        if (PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg' && ini_get('opcache.enable') === '1') {
            return true;
        }
        return false;
    }

}

Members

Title Sort descending Modifiers Object type Summary
Runtime::$initialized private static property
Runtime::$rawBinary private static property
Runtime::canCollectCodeCoverage public function Returns true when Xdebug or PCOV is available or
the runtime used is PHPDBG.
Runtime::discardsComments public function Returns true when Zend OPcache is loaded, enabled,
and is configured to discard comments.
Runtime::getBinary public function Returns the escaped path to the binary of the current runtime.
Runtime::getCurrentSettings public function Parses the loaded php.ini file (if any) as well as all
additional php.ini files from the additional ini dir for
a list of all configuration settings loaded from files
at startup. Then checks for each php.ini setting passed
via the `$values` parameter…
Runtime::getName public function
Runtime::getNameWithVersion public function
Runtime::getNameWithVersionAndCodeCoverageDriver public function
Runtime::getRawBinary public function Returns the raw path to the binary of the current runtime.
Runtime::getVendorUrl public function
Runtime::getVersion public function
Runtime::hasPCOV public function Returns true when the runtime used is PHP with PCOV loaded and enabled.
Runtime::hasPHPDBGCodeCoverage public function Returns true when the runtime used is PHP with the PHPDBG SAPI
and the phpdbg_*_oplog() functions are available (PHP &gt;= 7.0).
Runtime::hasXdebug public function Returns true when the runtime used is PHP and Xdebug is loaded.
Runtime::isOpcacheActive private function
Runtime::isPHP public function Returns true when the runtime used is PHP without the PHPDBG SAPI.
Runtime::isPHPDBG public function Returns true when the runtime used is PHP with the PHPDBG SAPI.
Runtime::performsJustInTimeCompilation public function Returns true when Zend OPcache is loaded, enabled,
and is configured to perform just-in-time compilation.

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal