Вход Регистрация
Файл: vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php
Строк: 195
<?php declare(strict_types=1);
/*
 * This file is part of PHPUnit.
 *
 * (c) Sebastian Bergmann <sebastian@phpunit.de>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace PHPUnitTextUIXmlConfiguration;

use const 
PATH_SEPARATOR;
use function 
constant;
use function 
define;
use function 
defined;
use function 
getenv;
use function 
implode;
use function 
ini_get;
use function 
ini_set;
use function 
putenv;

/**
 * @internal This class is not covered by the backward compatibility promise for PHPUnit
 */
final class PhpHandler
{
    public function 
handle(Php $configuration): void
    
{
        
$this->handleIncludePaths($configuration->includePaths());
        
$this->handleIniSettings($configuration->iniSettings());
        
$this->handleConstants($configuration->constants());
        
$this->handleGlobalVariables($configuration->globalVariables());
        
$this->handleServerVariables($configuration->serverVariables());
        
$this->handleEnvVariables($configuration->envVariables());
        
$this->handleVariables('_POST'$configuration->postVariables());
        
$this->handleVariables('_GET'$configuration->getVariables());
        
$this->handleVariables('_COOKIE'$configuration->cookieVariables());
        
$this->handleVariables('_FILES'$configuration->filesVariables());
        
$this->handleVariables('_REQUEST'$configuration->requestVariables());
    }

    private function 
handleIncludePaths(DirectoryCollection $includePaths): void
    
{
        if (!
$includePaths->isEmpty()) {
            
$includePathsAsStrings = [];

            foreach (
$includePaths as $includePath) {
                
$includePathsAsStrings[] = $includePath->path();
            }

            
ini_set(
                
'include_path',
                
implode(PATH_SEPARATOR$includePathsAsStrings) .
                
PATH_SEPARATOR .
                
ini_get('include_path')
            );
        }
    }

    private function 
handleIniSettings(IniSettingCollection $iniSettings): void
    
{
        foreach (
$iniSettings as $iniSetting) {
            
$value $iniSetting->value();

            if (
defined($value)) {
                
$value = (string) constant($value);
            }

            
ini_set($iniSetting->name(), $value);
        }
    }

    private function 
handleConstants(ConstantCollection $constants): void
    
{
        foreach (
$constants as $constant) {
            if (!
defined($constant->name())) {
                
define($constant->name(), $constant->value());
            }
        }
    }

    private function 
handleGlobalVariables(VariableCollection $variables): void
    
{
        foreach (
$variables as $variable) {
            
$GLOBALS[$variable->name()] = $variable->value();
        }
    }

    private function 
handleServerVariables(VariableCollection $variables): void
    
{
        foreach (
$variables as $variable) {
            
$_SERVER[$variable->name()] = $variable->value();
        }
    }

    private function 
handleVariables(string $targetVariableCollection $variables): void
    
{
        foreach (
$variables as $variable) {
            
$GLOBALS[$target][$variable->name()] = $variable->value();
        }
    }

    private function 
handleEnvVariables(VariableCollection $variables): void
    
{
        foreach (
$variables as $variable) {
            
$name  $variable->name();
            
$value $variable->value();
            
$force $variable->force();

            if (
$force || getenv($name) === false) {
                
putenv("{$name}={$value}");
            }

            
$value getenv($name);

            if (
$force || !isset($_ENV[$name])) {
                
$_ENV[$name] = $value;
            }
        }
    }
}
Онлайн: 0
Реклама