Make WordPress Core

Ticket #11613: 11613.3.diff

File 11613.3.diff, 5.7 KB (added by dd32, 15 years ago)
  • wp-includes/http.php

     
    9494        function &_getTransport( $args = array() ) {
    9595                static $working_transport, $blocking_transport, $nonblocking_transport;
    9696
    97                 if ( is_null($working_transport) ) {
     97                $kargs = $args;
     98                unset($kargs['headers'], $kargs['cookies'], $kargs['body'], $kargs['user-agent'], $kargs['timeout']);
     99
     100                $key = md5(serialize($kargs));
     101                if ( empty($working_transport[$key]) ) {
     102
     103                        if ( ! isset( $working_transport[$key] ) )
     104                                $working_transport[$key] = $blocking_transport[$key] = $nonblocking_transport[$key] = array();
     105
    98106                        if ( true === WP_Http_ExtHttp::test($args) ) {
    99                                 $working_transport['exthttp'] = new WP_Http_ExtHttp();
    100                                 $blocking_transport[] = &$working_transport['exthttp'];
     107                                $working_transport[$key]['exthttp'] = new WP_Http_ExtHttp();
     108                                $blocking_transport[$key][] = &$working_transport[$key]['exthttp'];
    101109                        } else if ( true === WP_Http_Curl::test($args) ) {
    102                                 $working_transport['curl'] = new WP_Http_Curl();
    103                                 $blocking_transport[] = &$working_transport['curl'];
     110                                $working_transport[$key]['curl'] = new WP_Http_Curl();
     111                                $blocking_transport[$key][] = &$working_transport[$key]['curl'];
    104112                        } else if ( true === WP_Http_Streams::test($args) ) {
    105                                 $working_transport['streams'] = new WP_Http_Streams();
    106                                 $blocking_transport[] = &$working_transport['streams'];
     113                                $working_transport[$key]['streams'] = new WP_Http_Streams();
     114                                $blocking_transport[$key][] = &$working_transport[$key]['streams'];
    107115                        } else if ( true === WP_Http_Fopen::test($args) ) {
    108                                 $working_transport['fopen'] = new WP_Http_Fopen();
    109                                 $blocking_transport[] = &$working_transport['fopen'];
     116                                $working_transport[$key]['fopen'] = new WP_Http_Fopen();
     117                                $blocking_transport[$key][] = &$working_transport[$key]['fopen'];
    110118                        } else if ( true === WP_Http_Fsockopen::test($args) ) {
    111                                 $working_transport['fsockopen'] = new WP_Http_Fsockopen();
    112                                 $blocking_transport[] = &$working_transport['fsockopen'];
     119                                $working_transport[$key]['fsockopen'] = new WP_Http_Fsockopen();
     120                                $blocking_transport[$key][] = &$working_transport[$key]['fsockopen'];
    113121                        }
    114122
    115123                        foreach ( array('curl', 'streams', 'fopen', 'fsockopen', 'exthttp') as $transport ) {
    116                                 if ( isset($working_transport[$transport]) )
    117                                         $nonblocking_transport[] = &$working_transport[$transport];
     124                                if ( isset($working_transport[$key][$transport]) )
     125                                        $nonblocking_transport[$key][] = &$working_transport[$key][$transport];
    118126                        }
    119127                }
    120128
    121                 do_action( 'http_transport_get_debug', $working_transport, $blocking_transport, $nonblocking_transport );
     129                do_action( 'http_transport_get_debug', $working_transport[$key], $blocking_transport[$key], $nonblocking_transport[$key] );
    122130
    123131                if ( isset($args['blocking']) && !$args['blocking'] )
    124                         return $nonblocking_transport;
     132                        return $nonblocking_transport[$key];
    125133                else
    126                         return $blocking_transport;
     134                        return $blocking_transport[$key];
    127135        }
    128136
    129137        /**
     
    144152        function &_postTransport( $args = array() ) {
    145153                static $working_transport, $blocking_transport, $nonblocking_transport;
    146154
    147                 if ( is_null($working_transport) ) {
     155                $kargs = $args;
     156                unset($kargs['headers'], $kargs['cookies'], $kargs['body'], $kargs['user-agent'], $kargs['timeout']);
     157
     158                $key = md5(serialize($kargs));
     159                if ( empty($working_transport[$key]) ) {
     160
     161                        if ( ! isset( $working_transport[$key] ) )
     162                                $working_transport[$key] = $blocking_transport[$key] = $nonblocking_transport[$key] = array();
     163                       
    148164                        if ( true === WP_Http_ExtHttp::test($args) ) {
    149                                 $working_transport['exthttp'] = new WP_Http_ExtHttp();
    150                                 $blocking_transport[] = &$working_transport['exthttp'];
     165                                $working_transport[$key]['exthttp'] = new WP_Http_ExtHttp();
     166                                $blocking_transport[$key][] = &$working_transport[$key]['exthttp'];
    151167                        } else if ( true === WP_Http_Curl::test($args) ) {
    152                                 $working_transport['curl'] = new WP_Http_Curl();
    153                                 $blocking_transport[] = &$working_transport['curl'];
     168                                $working_transport[$key]['curl'] = new WP_Http_Curl();
     169                                $blocking_transport[$key][] = &$working_transport[$key]['curl'];
    154170                        } else if ( true === WP_Http_Streams::test($args) ) {
    155                                 $working_transport['streams'] = new WP_Http_Streams();
    156                                 $blocking_transport[] = &$working_transport['streams'];
     171                                $working_transport[$key]['streams'] = new WP_Http_Streams();
     172                                $blocking_transport[$key][] = &$working_transport[$key]['streams'];
    157173                        } else if ( true === WP_Http_Fsockopen::test($args) ) {
    158                                 $working_transport['fsockopen'] = new WP_Http_Fsockopen();
    159                                 $blocking_transport[] = &$working_transport['fsockopen'];
     174                                $working_transport[$key]['fsockopen'] = new WP_Http_Fsockopen();
     175                                $blocking_transport[$key][] = &$working_transport[$key]['fsockopen'];
    160176                        }
    161177
    162178                        foreach ( array('curl', 'streams', 'fsockopen', 'exthttp') as $transport ) {
    163                                 if ( isset($working_transport[$transport]) )
    164                                         $nonblocking_transport[] = &$working_transport[$transport];
     179                                if ( isset($working_transport[$key][$transport]) )
     180                                        $nonblocking_transport[$key][] = &$working_transport[$key][$transport];
    165181                        }
    166182                }
    167183
    168                 do_action( 'http_transport_post_debug', $working_transport, $blocking_transport, $nonblocking_transport );
     184                do_action( 'http_transport_post_debug', $working_transport[$key], $blocking_transport[$key], $nonblocking_transport[$key] );
    169185
    170186                if ( isset($args['blocking']) && !$args['blocking'] )
    171                         return $nonblocking_transport;
     187                        return $nonblocking_transport[$key];
    172188                else
    173                         return $blocking_transport;
     189                        return $blocking_transport[$key];
    174190        }
    175191
    176192        /**