X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FPHPVersionCheck.php;h=e6e96c7ede89d73954c90f7d957aa38ca7b7dbcf;hb=1493438594c13afa4384abb0c2ff14ecd844295d;hp=ab8aada836c2733c922505117b958451ff4c1b8f;hpb=5cbada9dea3f22e7bb33250197b156e8628b8e4a;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/PHPVersionCheck.php b/includes/PHPVersionCheck.php index ab8aada836..e6e96c7ede 100644 --- a/includes/PHPVersionCheck.php +++ b/includes/PHPVersionCheck.php @@ -1,4 +1,7 @@ 'mbstring', + 'utf8_encode' => 'xml', + 'ctype_digit' => 'ctype', + 'json_decode' => 'json', + 'iconv' => 'iconv', + ); -/** - * Check php version and that external dependencies are installed, and - * display an informative error if either condition is not satisfied. - * - * @note Since we can't rely on anything, the minimum PHP versions and MW current - * version are hardcoded here - */ -function wfEntryPointCheck( $entryPoint ) { - $mwVersion = '1.28'; - $minimumVersionPHP = '5.5.9'; - $phpVersion = PHP_VERSION; - - if ( !function_exists( 'version_compare' ) - || version_compare( $phpVersion, $minimumVersionPHP ) < 0 - ) { - wfPHPVersionError( $entryPoint, $mwVersion, $minimumVersionPHP, $phpVersion ); + /** + * @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 + * @return $this + */ + function setEntryPoint( $entryPoint ) { + $this->entryPoint = $entryPoint; } - // @codingStandardsIgnoreStart MediaWiki.Usage.DirUsage.FunctionFound - if ( !file_exists( dirname( __FILE__ ) . '/../vendor/autoload.php' ) ) { - // @codingStandardsIgnoreEnd - wfMissingVendorError( $entryPoint, $mwVersion ); + /** + * Returns the version of the installed php implementation. + * + * @return string + */ + function getPHPImplVersion() { + return PHP_VERSION; } -} -/** - * Display something vaguely comprehensible in the event of a totally unrecoverable error. - * Does not assume access to *anything*; no globals, no autoloader, no database, no localisation. - * Safe for PHP4 (and putting this here means that WebStart.php and GlobalSettings.php - * no longer need to be). - * - * Calling this function kills execution immediately. - * - * @param string $type Which entry point we are protecting. One of: - * - index.php - * - load.php - * - api.php - * - mw-config/index.php - * - cli - * @param string $mwVersion The number of the MediaWiki version used - * @param string $title HTML code to be put within an

tag - * @param string $shortText - * @param string $longText - * @param string $longHtml - */ -function wfGenericError( $type, $mwVersion, $title, $shortText, $longText, $longHtml ) { - $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'; + /** + * Displays an error, if the installed php version does not meet the minimum requirement. + * + * @return $this + */ + function checkRequiredPHPVersion() { + if ( !function_exists( 'version_compare' ) + || version_compare( $this->getPHPImplVersion(), $this->minimumVersionPHP ) < 0 + ) { + $shortText = "MediaWiki $this->mwVersion requires at least PHP version" + . " $this->minimumVersionPHP, you are using PHP {$this->getPHPImplVersion()}."; + + $longText = "Error: You might be using on older PHP version. \n" + . "MediaWiki $this->mwVersion needs PHP $this->minimumVersionPHP or higher.\n\n" + . "Check if you have a newer php executable with a different name, " + . "such as php5.\n\n"; + + $longHtml = <<upgrading your copy of PHP. + PHP versions less than 5.5.0 are no longer supported by the PHP Group and will not receive + security or bugfix updates. +

+

+ If for some reason you are unable to upgrade your PHP version, you will need to + download an older version + of MediaWiki from our website. See our + compatibility page + for details of which versions are compatible with prior versions of PHP. +HTML; + $this->triggerError( 'Supported PHP versions', $shortText, $longText, $longHtml ); + } + } + + /** + * Displays an error, if the vendor/autoload.php file could not be found. + * + * @return $this + */ + 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."; + + $longHtml = <<mediawiki.org + for help on installing the required components. +HTML; + + $this->triggerError( 'External dependencies', $shortText, $longText, $longHtml ); + } + } + + /** + * Displays an error, if a PHP extension does not exist. + * + * @return $this + */ + 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 .= "

  • $ext " + . "(more information)
  • "; + } + + $cliText = "Error: Missing one or more required components of PHP.\n" + . "You are missing a required extension to PHP that MediaWiki needs.\n" + . "Please install:\n" . $missingExtText; + + $longHtml = << + $missingExtHtml + +HTML; + + $this->triggerError( 'Required components', $shortText, $cliText, $longHtml ); + } + } + + /** + * Output headers that prevents error pages to be cached. + */ + function outputHTMLHeader() { + $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'; - if ( $type == 'cli' ) { - $finalOutput = $longText; - } else { header( "$protocol 500 MediaWiki configuration Error" ); // Don't cache error pages! They cause no end of trouble... header( 'Cache-control: none' ); header( 'Pragma: no-cache' ); + } - if ( $type == 'index.php' || $type == 'mw-config/index.php' ) { - $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] ); - if ( $type == 'mw-config/index.php' ) { - $dirname = dirname( $pathinfo['dirname'] ); - } else { - $dirname = $pathinfo['dirname']; - } - $encLogo = htmlspecialchars( - str_replace( '//', '/', $dirname . '/' ) . - 'resources/assets/mediawiki.png' - ); - $shortHtml = htmlspecialchars( $shortText ); + /** + * Returns an error page, which is suitable for output to the end user via a web browser. + * + * @param $title + * @param $longHtml + * @param $shortText + * @return string + */ + function getIndexErrorOutput( $title, $longHtml, $shortText ) { + $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] ); + if ( $this->entryPoint == 'mw-config/index.php' ) { + $dirname = dirname( $pathinfo['dirname'] ); + } else { + $dirname = $pathinfo['dirname']; + } + $encLogo = + htmlspecialchars( str_replace( '//', '/', $dirname . '/' ) . + 'resources/assets/mediawiki.png' ); + $shortHtml = htmlspecialchars( $shortText ); - header( 'Content-type: text/html; charset=UTF-8' ); + header( 'Content-type: text/html; charset=UTF-8' ); - $finalOutput = << - MediaWiki {$mwVersion} + MediaWiki {$this->mwVersion}