X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fdrush%2Fdrush%2Fsrc%2FPreflight%2FPreflightVerify.php;fp=vendor%2Fdrush%2Fdrush%2Fsrc%2FPreflight%2FPreflightVerify.php;h=aec71eee6d9ae93efac93b7a77d644a670551653;hp=0000000000000000000000000000000000000000;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0 diff --git a/vendor/drush/drush/src/Preflight/PreflightVerify.php b/vendor/drush/drush/src/Preflight/PreflightVerify.php new file mode 100644 index 000000000..aec71eee6 --- /dev/null +++ b/vendor/drush/drush/src/Preflight/PreflightVerify.php @@ -0,0 +1,117 @@ +confirmPhpVersion('5.6.0'); + + // Fail if this is not a CLI php + $this->confirmUsingCLI($environment); + + // Fail if any mandatory functions have been disabled, or any + // illegal options have been set in php.ini. + $this->checkPhpIni(); + } + + /** + * Fail fast if the php version does not meet the minimum requirements. + * + * @param string $minimumPhpVersion + * The minimum allowable php version + */ + public function confirmPhpVersion($minimumPhpVersion) + { + if (version_compare(phpversion(), $minimumPhpVersion) < 0 && !getenv('DRUSH_NO_MIN_PHP')) { + throw new \Exception(StringUtils::interpolate('Your command line PHP installation is too old. Drush requires at least PHP {version}. To suppress this check, set the environment variable DRUSH_NO_MIN_PHP=1', ['version' => $minimumPhpVersion])); + } + } + + /** + * Fail if not being run from the command line. + * + * @param Environment $environment + */ + protected function confirmUsingCLI(Environment $environment) + { + if (!$environment->verifyCLI()) { + throw new \Exception(StringUtils::interpolate('Drush is designed to run via the command line.')); + } + } + + /** + * Evaluate the environment before command bootstrapping + * begins. If the php environment is too restrictive, then + * notify the user that a setting change is needed and abort. + */ + protected function checkPhpIni() + { + $ini_checks = ['safe_mode' => '', 'open_basedir' => '', 'disable_functions' => ['exec', 'system'], 'disable_classes' => '']; + + // Test to insure that certain php ini restrictions have not been enabled + $prohibited_list = []; + foreach ($ini_checks as $prohibited_mode => $disallowed_value) { + $ini_value = ini_get($prohibited_mode); + if ($this->invalidIniValue($ini_value, $disallowed_value)) { + $prohibited_list[] = $prohibited_mode; + } + } + if (!empty($prohibited_list)) { + throw new \Exception(StringUtils::interpolate('The following restricted PHP modes have non-empty values: {prohibited_list}. This configuration is incompatible with drush. {php_ini_msg}', ['prohibited_list' => implode(' and ', $prohibited_list), 'php_ini_msg' => $this->loadedPhpIniMessage()])); + } + } + + /** + * Determine whether an ini value is valid based on the criteria. + * + * @param string $ini_value + * The value of the ini setting being tested. + * @param string|string[] $disallowed_value + * The value that the ini seting cannot be, or a list of disallowed + * values that cannot appear in the setting. + * @return bool + */ + protected function invalidIniValue($ini_value, $disallowed_value) + { + if (empty($disallowed_value)) { + return !empty($ini_value) && (strcasecmp($ini_value, 'off') != 0); + } else { + foreach ($disallowed_value as $test_value) { + if (preg_match('/(^|,)' . $test_value . '(,|$)/', $ini_value)) { + return true; + } + } + } + return false; + } + + /** + * Returns a localizable message about php.ini that + * varies depending on whether the php_ini_loaded_file() + * is available or not. + */ + protected function loadedPhpIniMessage() + { + if (function_exists('php_ini_loaded_file')) { + return StringUtils::interpolate('Please check your configuration settings in !phpini or in your drush.ini file; see examples/example.drush.ini for details.', ['!phpini' => php_ini_loaded_file()]); + } else { + return StringUtils::interpolate('Please check your configuration settings in your php.ini file or in your drush.ini file; see examples/example.drush.ini for details.'); + } + } +}