Merge "Add support for 'hu-formal'"
[lhc/web/wiklou.git] / api.php
diff --git a/api.php b/api.php
index 9721c4f..d9a69db 100644 (file)
--- a/api.php
+++ b/api.php
@@ -35,13 +35,6 @@ use MediaWiki\Logger\LegacyLogger;
 // So extensions (and other code) can check whether they're running in API mode
 define( 'MW_API', true );
 
-// Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.3' ) < 0 ) {
-       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
-       require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
-       wfPHPVersionError( 'api.php' );
-}
-
 require __DIR__ . '/includes/WebStart.php';
 
 $starttime = microtime( true );
@@ -51,6 +44,17 @@ if ( !$wgRequest->checkUrlExtension() ) {
        return;
 }
 
+// Pathinfo can be used for stupid things. We don't support it for api.php at
+// all, so error out if it's present.
+if ( isset( $_SERVER['PATH_INFO'] ) && $_SERVER['PATH_INFO'] != '' ) {
+       $correctUrl = wfAppendQuery( wfScript( 'api' ), $wgRequest->getQueryValues() );
+       $correctUrl = wfExpandUrl( $correctUrl, PROTO_CANONICAL );
+       header( "Location: $correctUrl", true, 301 );
+       echo 'This endpoint does not support "path info", i.e. extra text between "api.php"'
+               . 'and the "?". Remove any such text and try again.';
+       die( 1 );
+}
+
 // Verify that the API has not been disabled
 if ( !$wgEnableAPI ) {
        header( $_SERVER['SERVER_PROTOCOL'] . ' 500 MediaWiki configuration Error', true, 500 );
@@ -70,12 +74,12 @@ RequestContext::getMain()->setTitle( $wgTitle );
 try {
        /* Construct an ApiMain with the arguments passed via the URL. What we get back
         * is some form of an ApiMain, possibly even one that produces an error message,
-        * but we don't care here, as that is handled by the ctor.
+        * but we don't care here, as that is handled by the constructor.
         */
        $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
 
        // Last chance hook before executing the API
-       Hooks::run( 'ApiBeforeMain', array( &$processor ) );
+       Hooks::run( 'ApiBeforeMain', [ &$processor ] );
        if ( !$processor instanceof ApiMain ) {
                throw new MWException( 'ApiBeforeMain hook set $processor to a non-ApiMain class' );
        }
@@ -90,28 +94,17 @@ if ( $processor ) {
        $processor->execute();
 }
 
-if ( function_exists( 'fastcgi_finish_request' ) ) {
-       fastcgi_finish_request();
-}
-
-JobQueueGroup::pushLazyJobs();
-
-// Execute any deferred updates
-DeferredUpdates::doUpdates();
-
 // Log what the user did, for book-keeping purposes.
 $endtime = microtime( true );
 
-wfLogProfilingData();
-
 // Log the request
 if ( $wgAPIRequestLog ) {
-       $items = array(
+       $items = [
                wfTimestamp( TS_MW ),
                $endtime - $starttime,
                $wgRequest->getIP(),
                $wgRequest->getHeader( 'User-agent' )
-       );
+       ];
        $items[] = $wgRequest->wasPosted() ? 'POST' : 'GET';
        if ( $processor ) {
                try {
@@ -132,7 +125,5 @@ if ( $wgAPIRequestLog ) {
        wfDebug( "Logged API request to $wgAPIRequestLog\n" );
 }
 
-// Shut down the database.  foo()->bar() syntax is not supported in PHP4: we won't ever actually
-// get here to worry about whether this should be = or =&, but the file has to parse properly.
-$lb = wfGetLBFactory();
-$lb->shutdown();
+$mediawiki = new MediaWiki();
+$mediawiki->doPostOutputShutdown( 'fast' );