'mbstring', 'utf8_encode' => 'xml', 'ctype_digit' => 'ctype', 'json_decode' => 'json', 'iconv' => 'iconv', 'mime_content_type' => 'fileinfo', ); /** * @var string Which entry point we are protecting. One of: * - index.php * - load.php * - api.php * - mw-config/index.php * - cli */ var $entryPoint = null; /** * @param string $entryPoint Which entry point we are protecting. One of: * - index.php * - load.php * - api.php * - mw-config/index.php * - cli */ function setEntryPoint( $entryPoint ) { $this->entryPoint = $entryPoint; } /** * Returns the version of the installed php implementation. * * @param string $impl By default, the function returns the info of the currently installed PHP * implementation. Using this parameter the caller can decide, what version info will be * returned. Valid values: HHVM, PHP * @return array An array of information about the php implementation, containing: * - 'version': The version of the php implementation (specific to the implementation, not * the version of the implemented php version) * - 'implementation': The name of the implementation used * - 'vendor': The development group, vendor or developer of the implementation. * - 'upstreamSupported': The minimum version of the implementation supported by the named vendor. * - 'minSupported': The minimum version supported by MediWiki * - 'upgradeURL': The URL to the website of the implementation that contains * upgrade/installation instructions. */ function getPHPInfo( $impl = false ) { if ( ( defined( 'HHVM_VERSION' ) && $impl !== 'PHP' ) || $impl === 'HHVM' ) { return array( 'implementation' => 'HHVM', 'version' => defined( 'HHVM_VERSION' ) ? HHVM_VERSION : 'undefined', 'vendor' => 'Facebook', 'upstreamSupported' => '3.18.5', 'minSupported' => '3.18.5', 'upgradeURL' => 'https://docs.hhvm.com/hhvm/installation/introduction', ); } return array( 'implementation' => 'PHP', 'version' => PHP_VERSION, 'vendor' => 'the PHP Group', 'upstreamSupported' => '5.6.0', 'minSupported' => '5.5.9', 'upgradeURL' => 'https://secure.php.net/downloads.php', ); } /** * Displays an error, if the installed php version does not meet the minimum requirement. */ function checkRequiredPHPVersion() { $phpInfo = $this->getPHPInfo(); $minimumVersion = $phpInfo['minSupported']; $otherInfo = $this->getPHPInfo( $phpInfo['implementation'] === 'HHVM' ? 'PHP' : 'HHVM' ); if ( !function_exists( 'version_compare' ) || version_compare( $phpInfo['version'], $minimumVersion ) < 0 ) { $shortText = "MediaWiki $this->mwVersion requires at least {$phpInfo['implementation']}" . " version $minimumVersion or {$otherInfo['implementation']} version " . "{$otherInfo['minSupported']}, you are using {$phpInfo['implementation']} " . "{$phpInfo['version']}."; $longText = "Error: You might be using an older {$phpInfo['implementation']} version. \n" . "MediaWiki $this->mwVersion needs {$phpInfo['implementation']}" . " $minimumVersion or higher or {$otherInfo['implementation']} version " . "{$otherInfo['minSupported']}.\n\nCheck if you have a" . " newer php executable with a different name, such as php5.\n\n"; // phpcs:disable Generic.Files.LineLength $longHtml = <<upgrading your copy of {$phpInfo['implementation']}. {$phpInfo['implementation']} versions less than {$phpInfo['upstreamSupported']} are no longer supported by {$phpInfo['vendor']} and will not receive security or bugfix updates.
If for some reason you are unable to upgrade your {$phpInfo['implementation']} version, you will need to download an older version of MediaWiki from our website. See ourcompatibility page for details of which versions are compatible with prior versions of {$phpInfo['implementation']}. HTML; // phpcs:enable Generic.Files.LineLength $this->triggerError( "Supported {$phpInfo['implementation']} versions", $shortText, $longText, $longHtml ); } } /** * Displays an error, if the vendor/autoload.php file could not be found. */ function checkVendorExistence() { if ( !file_exists( dirname( __FILE__ ) . '/../vendor/autoload.php' ) ) { $shortText = "Installing some external dependencies (e.g. via composer) is required."; $longText = "Error: You are missing some external dependencies. \n" . "MediaWiki now also has some external dependencies that need to be installed\n" . "via composer or from a separate git repo. Please see\n" . "https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries\n" . "for help on installing the required components."; // phpcs:disable Generic.Files.LineLength $longHtml = <<mediawiki.org for help on installing the required components. HTML; // phpcs:enable Generic.Files.LineLength $this->triggerError( 'External dependencies', $shortText, $longText, $longHtml ); } } /** * Displays an error, if a PHP extension does not exist. */ function checkExtensionExistence() { $missingExtensions = array(); foreach ( $this->functionsExtensionsMapping as $function => $extension ) { if ( !function_exists( $function ) ) { $missingExtensions[] = $extension; } } if ( $missingExtensions ) { $shortText = "Installing some PHP extensions is required."; $missingExtText = ''; $missingExtHtml = ''; $baseUrl = 'https://secure.php.net'; foreach ( $missingExtensions as $ext ) { $missingExtText .= " * $ext <$baseUrl/$ext>\n"; $missingExtHtml .= "
{$shortHtml}
{$longHtml}