From b3f9120af5fc883b38d5e7b55368ff61c2bbdd09 Mon Sep 17 00:00:00 2001 From: paladox Date: Sun, 5 Jul 2015 12:42:28 +0000 Subject: [PATCH] Rework PHP and vendor check * separate warnings for PHP version and vendor * new wfGenericError() function * minimum PHP version in a single place Bug: T102094 Change-Id: I7ae0369e4bab279d5e1bc754fe1a0bc8543bb2ed --- includes/PHPVersionCheck.php | 146 ++++++++++++++++++++++------------- 1 file changed, 94 insertions(+), 52 deletions(-) diff --git a/includes/PHPVersionCheck.php b/includes/PHPVersionCheck.php index d11d02117b..9dec95084e 100644 --- a/includes/PHPVersionCheck.php +++ b/includes/PHPVersionCheck.php @@ -25,13 +25,23 @@ /** * 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.26'; + $minimumVersionPHP = '5.3.3'; + $phpVersion = PHP_VERSION; + if ( !function_exists( 'version_compare' ) - || version_compare( PHP_VERSION, '5.3.3' ) < 0 - || !file_exists( dirname( __FILE__ ) . '/../vendor/autoload.php' ) + || version_compare( $phpVersion, $minimumVersionPHP ) < 0 ) { - wfPHPVersionError( $entryPoint ); + wfPHPVersionError( $entryPoint, $mwVersion, $minimumVersionPHP, $phpVersion ); + } + + if ( !file_exists( dirname( __FILE__ ) . '/../vendor/autoload.php' ) ) { + wfMissingVendorError( $entryPoint, $mwVersion ); } } @@ -49,47 +59,39 @@ function wfEntryPointCheck( $entryPoint ) { * - api.php * - mw-config/index.php * - cli - * - * @note Since we can't rely on anything, the minimum PHP versions and MW current - * version are hardcoded here + * @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 wfPHPVersionError( $type ) { - $mwVersion = '1.26'; - $minimumVersionPHP = '5.3.3'; - - $phpVersion = PHP_VERSION; +function wfGenericError( $type, $mwVersion, $title, $shortText, $longText, $longHtml ) { $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'; - $message = "MediaWiki $mwVersion requires at least " - . "PHP version $minimumVersionPHP, you are using PHP $phpVersion. Installing some " - . " external dependencies (e.g. via composer) is also required."; if ( $type == 'cli' ) { - $finalOutput = "Error: You are missing some external dependencies or are using on older PHP version. \n" - . "MediaWiki $mwVersion needs PHP $minimumVersionPHP or higher.\n\n" - . "Check if you have a newer php executable with a different name, such as php5.\n\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."; - } elseif ( $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' - ); - + $finalOutput = $longText; + } else { header( "$protocol 500 MediaWiki configuration Error" ); - header( 'Content-type: text/html; charset=UTF-8' ); // Don't cache error pages! They cause no end of trouble... header( 'Cache-control: none' ); header( 'Pragma: no-cache' ); - $finalOutput = << @@ -120,10 +122,43 @@ function wfPHPVersionError( $type ) {

MediaWiki {$mwVersion} internal error

- {$message} + {$shortHtml}

-

Supported PHP versions

+

{$title}

+ {$longHtml} +

+
+ + +HTML; + // Handle everything that's not index.php + } else { + // So nothing thinks this is JS or CSS + $finalOutput = ( $type == 'load.php' ) ? "/* $shortText */" : $shortText; + } + } + echo "$finalOutput\n"; + die( 1 ); +} + +/** + * Display an error for the minimum PHP version requirement not being satisfied. + * + * @param string $type See wfGenericError + * @param string $mwVersion See wfGenericError + * @param string $minimumVersionPHP The minimum PHP version supported by MediaWiki + * @param string $phpVersion The current PHP version + */ +function wfPHPVersionError( $type, $mwVersion, $minimumVersionPHP, $phpVersion ) { + $shortText = "MediaWiki $mwVersion requires at least " + . "PHP version $minimumVersionPHP, you are using PHP $phpVersion."; + + $longText = "Error: You might be using on older PHP version. \n" + . "MediaWiki $mwVersion needs PHP $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.3.0 are no longer supported by the PHP Group and will not receive security or bugfix updates. @@ -134,24 +169,31 @@ function wfPHPVersionError( $type ) { of MediaWiki from our website. See our compatibility page for details of which versions are compatible with prior versions of PHP. -

-

External dependencies

-

+HTML; + wfGenericError( $type, $mwVersion, 'Supported PHP versions', $shortText, $longText, $longHtml ); +} + +/** + * Display an error for the vendor/autoload.php file not being found. + * + * @param string $type See wfGenericError + * @param string $mwVersion See wfGenericError + */ +function wfMissingVendorError( $type, $mwVersion ) { + $shortText = "Installing some external dependencies (e.g. via composer) is also 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; - // Handle everything that's not index.php - } else { - // So nothing thinks this is JS or CSS - $finalOutput = ( $type == 'load.php' ) ? "/* $message */" : $message; - header( "$protocol 500 MediaWiki configuration Error" ); - } - echo "$finalOutput\n"; - die( 1 ); + + wfGenericError( $type, $mwVersion, 'External dependencies', $shortText, $longText, $longHtml ); } -- 2.20.1