Make WordPress Core


Ignore:
Timestamp:
08/31/2016 12:23:26 AM (8 years ago)
Author:
johnbillion
Message:

HTTP API: Revert changes to wp_parse_url() while PHP 5.2 errors are investigated.

See #36356

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/http.php

    r38450 r38456  
    634634 *
    635635 * @since 4.4.0
    636  * @since 4.7.0 The $component parameter was added for parity with PHP's parse_url().
    637  *
    638  * @param string $url       The URL to parse.
    639  * @param int    $component The specific component to retrieve. Use one of the PHP
    640  *                          predefined constants to specify which one.
    641  *                          Defaults to -1 (= return all parts as an array).
    642  *                          @see http://php.net/manual/en/function.parse-url.php
    643  * @return mixed False on failure; Array of URL components on success;
    644  *               When a specific component has been requested: null if the component doesn't
    645  *               exist in the given URL; a sting or - in the case of PHP_URL_PORT - integer
    646  *               when it does; See parse_url()'s return values.
    647  */
    648 function wp_parse_url( $url, $component = -1 ) {
    649     $parts = @parse_url( $url, $component );
    650 
    651     if ( version_compare( PHP_VERSION, '5.4.7', '>=' ) ) {
    652         return $parts;
    653     }
    654 
    655     if ( false === $parts ) {
     636 *
     637 * @param string $url The URL to parse.
     638 * @return bool|array False on failure; Array of URL components on success;
     639 *                    See parse_url()'s return values.
     640 */
     641function wp_parse_url( $url ) {
     642    $parts = @parse_url( $url );
     643    if ( ! $parts ) {
    656644        // < PHP 5.4.7 compat, trouble with relative paths including a scheme break in the path
    657645        if ( '/' == $url[0] && false !== strpos( $url, '://' ) ) {
    658646            // Since we know it's a relative path, prefix with a scheme/host placeholder and try again
    659             if ( ! $parts = @parse_url( 'placeholder://placeholder' . $url, $component ) ) {
     647            if ( ! $parts = @parse_url( 'placeholder://placeholder' . $url ) ) {
    660648                return $parts;
    661649            }
    662             if ( is_array( $parts ) ) {
    663                 // Remove the placeholder values
    664                 unset( $parts['scheme'], $parts['host'] );
    665             }
     650            // Remove the placeholder values
     651            unset( $parts['scheme'], $parts['host'] );
    666652        } else {
    667653            return $parts;
     
    669655    }
    670656
    671     // < PHP 5.4.7 compat, doesn't detect a schemeless URL's host field
    672     if ( '//' == substr( $url, 0, 2 ) ) {
    673         if ( -1 === $component && ! isset( $parts['host'] ) ) {
    674             $path_parts = explode( '/', substr( $parts['path'], 2 ), 2 );
    675             $parts['host'] = $path_parts[0];
    676             if ( isset( $path_parts[1] ) ) {
    677                 $parts['path'] = '/' . $path_parts[1];
    678             } else {
    679                 unset( $parts['path'] );
    680             }
    681         } elseif ( PHP_URL_HOST === $component || PHP_URL_PATH === $component ) {
    682             $all_parts = @parse_url( $url );
    683             if ( ! isset( $all_parts['host'] ) ) {
    684                 $path_parts = explode( '/', substr( $all_parts['path'], 2 ), 2 );
    685                 if ( PHP_URL_PATH === $component ) {
    686                     if ( isset( $path_parts[1] ) ) {
    687                         $parts = '/' . $path_parts[1];
    688                     } else {
    689                         $parts = null;
    690                     }
    691                 } elseif ( PHP_URL_HOST === $component ) {
    692                     $parts = $path_parts[0];
    693                 }
    694             }
     657    // < PHP 5.4.7 compat, doesn't detect schemeless URL's host field
     658    if ( '//' == substr( $url, 0, 2 ) && ! isset( $parts['host'] ) ) {
     659        $path_parts = explode( '/', substr( $parts['path'], 2 ), 2 );
     660        $parts['host'] = $path_parts[0];
     661        if ( isset( $path_parts[1] ) ) {
     662            $parts['path'] = '/' . $path_parts[1];
     663        } else {
     664            unset( $parts['path'] );
    695665        }
    696666    }
Note: See TracChangeset for help on using the changeset viewer.