From e6763161e73268615ab54965f80d7c2dc84563e0 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Sun, 28 Oct 2018 14:12:54 -0700 Subject: [PATCH] PHPVersionCheck: Remove obsolete load.php code and simplify * Remove obsolete handling for 'load.php', which no longer uses this check. This hasn't been used for several releases. * Remove the 'entryPoint' parameter in favour of 'format', which it was already a proxy for. * Move the double dirname() logic to mw-config/index.php. Bug: T189966 Change-Id: I343216442475d36e61213900f196ab6ec5f6b747 --- includes/PHPVersionCheck.php | 86 ++++++++++++++++++------------------ index.php | 2 +- maintenance/Maintenance.php | 2 +- mw-config/index.php | 2 +- 4 files changed, 45 insertions(+), 47 deletions(-) diff --git a/includes/PHPVersionCheck.php b/includes/PHPVersionCheck.php index aee2a0cb92..8406bfbfb5 100644 --- a/includes/PHPVersionCheck.php +++ b/includes/PHPVersionCheck.php @@ -24,6 +24,13 @@ * Check PHP Version, as well as for composer dependencies in entry points, * and display something vaguely comprehensible in the event of a totally * unrecoverable error. + * + * @note Since we can't rely on anything external, the minimum PHP versions + * and MW current version are hardcoded in this class. + * + * @note This class uses setter methods instead of a constructor so that + * it can be compatible with PHP 4, PHP 5 and PHP 7 (without warnings). + * * @class */ class PHPVersionCheck { @@ -41,29 +48,35 @@ class PHPVersionCheck { ); /** - * @var string Which entry point we are protecting. One of: - * - index.php - * - load.php - * - api.php - * - mw-config/index.php - * - cli + * @var string $format The format used for errors. One of "text" or "html" + */ + var $format = 'text'; + + /** + * @var string $scriptPath */ - var $entryPoint = null; + var $scriptPath = '/'; /** - * @param string $entryPoint Which entry point we are protecting. One of: - * - index.php - * - load.php - * - api.php - * - mw-config/index.php - * - cli + * Set the format used for errors. + * + * @param string $format One of "text" or "html" */ - function setEntryPoint( $entryPoint ) { - $this->entryPoint = $entryPoint; + function setFormat( $format ) { + $this->format = $format; } /** - * Returns the version of the installed PHP implementation. + * Set the script path used for images in HTML-formatted errors. + * + * @param string $scriptPath + */ + function setScriptPath( $scriptPath ) { + $this->scriptPath = $scriptPath; + } + + /** + * Return 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 @@ -236,14 +249,8 @@ HTML; * @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 . '/' ) . + htmlspecialchars( str_replace( '//', '/', $this->scriptPath . '/' ) . 'resources/assets/mediawiki.png' ); $shortHtml = htmlspecialchars( $shortText ); @@ -308,23 +315,13 @@ HTML; * @param string $longHtml */ function triggerError( $title, $shortText, $longText, $longHtml ) { - switch ( $this->entryPoint ) { - case 'cli': - $finalOutput = $longText; - break; - case 'index.php': - case 'mw-config/index.php': - $this->outputHTMLHeader(); - $finalOutput = $this->getIndexErrorOutput( $title, $longHtml, $shortText ); - break; - case 'load.php': - $this->outputHTMLHeader(); - $finalOutput = "/* $shortText */"; - break; - default: - $this->outputHTMLHeader(); - // Handle everything that's not index.php - $finalOutput = $shortText; + if ( $this->format === 'html' ) { + // Used by index.php and mw-config/index.php + $this->outputHTMLHeader(); + $finalOutput = $this->getIndexErrorOutput( $title, $longHtml, $shortText ); + } else { + // Used by Maintenance.php (CLI) + $finalOutput = $longText; } echo "$finalOutput\n"; @@ -336,12 +333,13 @@ HTML; * 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. + * @param string $format One of "text" or "html" + * @param string $scriptPath Used when an error is formatted as HTML. */ -function wfEntryPointCheck( $entryPoint ) { +function wfEntryPointCheck( $format = 'text', $scriptPath = '/' ) { $phpVersionCheck = new PHPVersionCheck(); - $phpVersionCheck->setEntryPoint( $entryPoint ); + $phpVersionCheck->setFormat( $format ); + $phpVersionCheck->setScriptPath( $scriptPath ); $phpVersionCheck->checkRequiredPHPVersion(); $phpVersionCheck->checkVendorExistence(); $phpVersionCheck->checkExtensionExistence(); diff --git a/index.php b/index.php index 791ffb1345..0df4cd01ad 100644 --- a/index.php +++ b/index.php @@ -34,7 +34,7 @@ // dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+. // phpcs:ignore MediaWiki.Usage.DirUsage.FunctionFound require_once dirname( __FILE__ ) . '/includes/PHPVersionCheck.php'; -wfEntryPointCheck( 'index.php' ); +wfEntryPointCheck( 'html', dirname( $_SERVER['SCRIPT_NAME'] ) ); require __DIR__ . '/includes/WebStart.php'; diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php index 6219476282..04c4f53fb7 100644 --- a/maintenance/Maintenance.php +++ b/maintenance/Maintenance.php @@ -23,7 +23,7 @@ // Bail on old versions of PHP, or if composer has not been run yet to install // dependencies. require_once __DIR__ . '/../includes/PHPVersionCheck.php'; -wfEntryPointCheck( 'cli' ); +wfEntryPointCheck( 'text' ); use MediaWiki\Shell\Shell; diff --git a/mw-config/index.php b/mw-config/index.php index a47822bb81..804d0a1159 100644 --- a/mw-config/index.php +++ b/mw-config/index.php @@ -25,7 +25,7 @@ // dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+. // phpcs:ignore MediaWiki.Usage.DirUsage.FunctionFound require_once dirname( __FILE__ ) . '/../includes/PHPVersionCheck.php'; -wfEntryPointCheck( 'mw-config/index.php' ); +wfEntryPointCheck( 'html', dirname( dirname( $_SERVER['SCRIPT_NAME'] ) ) ); define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' ); define( 'MEDIAWIKI_INSTALL', true ); -- 2.20.1