WordPress.org

Make WordPress Core

Changeset 10507


Ignore:
Timestamp:
02/05/09 20:46:39 (5 years ago)
Author:
ryan
Message:

HTTP API updates and fixes. Props sivel. see #8702

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/functions.php

    r10504 r10507  
    623623    } 
    624624    return true; 
     625} 
     626 
     627/** 
     628 * Delete a transient 
     629 * 
     630 * @since 2.8.0 
     631 * @package WordPress 
     632 * @subpackage Transient 
     633 * 
     634 * @param string $transient Transient name. Expected to not be SQL-escaped 
     635 * @return bool true if successful, false otherwise 
     636 */ 
     637function delete_transient($transient) { 
     638    global $_wp_using_ext_object_cache, $wpdb; 
     639 
     640    if ( $_wp_using_ext_object_cache ) { 
     641        return wp_cache_delete($transient, 'transient'); 
     642    } else { 
     643        $transient = $wpdb->escape($transient); 
     644        return delete_option($transient); 
     645    } 
     646} 
     647 
     648/** 
     649 * Get the value of a transient 
     650 * 
     651 * If the transient does not exist or does not have a value, then the return value 
     652 * will be false. 
     653 *  
     654 * @since 2.8.0 
     655 * @package WordPress 
     656 * @subpackage Transient 
     657 * 
     658 * @param string $transient Transient name. Expected to not be SQL-escaped 
     659 * @return mixed Value of transient 
     660 */ 
     661function get_transient($transient) { 
     662    global $_wp_using_ext_object_cache, $wpdb; 
     663 
     664    if ( $_wp_using_ext_object_cache ) { 
     665        return wp_cache_get($transient, 'transient'); 
     666    } else { 
     667        $transient = $wpdb->escape($transient); 
     668        return get_option($transient); 
     669    } 
     670} 
     671 
     672/** 
     673 * Set/update the value of a transient 
     674 * 
     675 * You do not need to serialize values, if the value needs to be serialize, then 
     676 * it will be serialized before it is set. 
     677 * 
     678 * @since 2.8.0 
     679 * @package WordPress 
     680 * @subpackage Transient 
     681 * 
     682 * @param string $transient Transient name. Expected to not be SQL-escaped 
     683 * @param mixed $value Transient value. 
     684 * @return bool False if value was not set and true if value was set. 
     685 */ 
     686function set_transient($transient, $value) { 
     687    global $_wp_using_ext_object_cache, $wpdb; 
     688 
     689    if ( $_wp_using_ext_object_cache ) { 
     690        return wp_cache_set($transient, $value, 'transient'); 
     691    } else { 
     692        $safe_transient = $wpdb->escape($transient); 
     693        if ( false === get_option( $safe_transient ) ) 
     694            return add_option($transient, $value, '', 'no'); 
     695        else 
     696            return update_option($transient, $value); 
     697    } 
    625698} 
    626699 
  • trunk/wp-includes/http.php

    r10410 r10507  
    238238                $working_transport['streams'] = new WP_Http_Streams(); 
    239239                $blocking_transport[] = &$working_transport['streams']; 
    240             } else if ( true === WP_Http_Fopen::test() && apply_filters('use_fopen_transport', true) ) { 
     240            } else if ( true === WP_Http_Fopen::test() && apply_filters('use_fopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) { 
    241241                $working_transport['fopen'] = new WP_Http_Fopen(); 
    242242                $blocking_transport[] = &$working_transport['fopen']; 
    243             } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) ) { 
     243            } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) { 
    244244                $working_transport['fsockopen'] = new WP_Http_Fsockopen(); 
    245245                $blocking_transport[] = &$working_transport['fsockopen']; 
     
    283283                $working_transport['exthttp'] = new WP_Http_ExtHttp(); 
    284284                $blocking_transport[] = &$working_transport['exthttp']; 
     285            } else if ( true === WP_Http_Curl::test() && apply_filters('use_curl_transport', true) ) { 
     286                $working_transport['curl'] = new WP_Http_Curl(); 
     287                $blocking_transport[] = &$working_transport['curl']; 
    285288            } else if ( true === WP_Http_Streams::test() && apply_filters('use_streams_transport', true) ) { 
    286289                $working_transport['streams'] = new WP_Http_Streams(); 
    287290                $blocking_transport[] = &$working_transport['streams']; 
    288             } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) ) { 
     291            } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) { 
    289292                $working_transport['fsockopen'] = new WP_Http_Fsockopen(); 
    290293                $blocking_transport[] = &$working_transport['fsockopen']; 
    291294            } 
    292295 
    293             foreach ( array('streams', 'fsockopen', 'exthttp') as $transport ) { 
     296            foreach ( array('curl', 'streams', 'fsockopen', 'exthttp') as $transport ) { 
    294297                if ( isset($working_transport[$transport]) ) 
    295298                    $nonblocking_transport[] = &$working_transport[$transport]; 
     
    359362            'redirection' => apply_filters( 'http_request_redirection_count', 5), 
    360363            'httpversion' => apply_filters( 'http_request_version', '1.0'), 
    361             'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version ), 
     364            'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )  ), 
    362365            'blocking' => true, 
    363366            'headers' => array(), 
    364367            'body' => null, 
    365368            'compress' => false, 
    366             'decompress' => true 
     369            'decompress' => true, 
     370            'sslverify' => true 
    367371        ); 
    368372 
    369373        $r = wp_parse_args( $args, $defaults ); 
    370374        $r = apply_filters( 'http_request_args', $r, $url ); 
     375 
     376        $arrURL = parse_url($url); 
     377 
     378        // Determine if this is a https call and pass that on to the transport functions 
     379        // so that we can blacklist the transports that do not support ssl verification 
     380        if ( $arrURL['scheme'] == 'https' || $arrURL['scheme'] == 'ssl' ) 
     381            $r['ssl'] = true; 
     382        else 
     383            $r['ssl'] = false; 
    371384 
    372385        if ( is_null( $r['headers'] ) ) 
     
    928941                'protocol_version' => (float) $r['httpversion'], 
    929942                'header' => $strHeaders, 
    930                 'timeout' => $r['timeout'] 
     943                'timeout' => $r['timeout'], 
     944                'ssl' => array( 
     945                                    'verify_peer' => apply_filters('https_ssl_verify', $r['sslverify']), 
     946                                    'verify_host' => apply_filters('https_ssl_verify', $r['sslverify']) 
     947                            ) 
    931948            ) 
    932949        ); 
     
    10611078            'useragent' => $r['user-agent'], 
    10621079            'headers' => $r['headers'], 
     1080            'ssl' => array(  
     1081                'verifypeer' => apply_filters('https_ssl_verify', $r['sslverify']), 
     1082                'verifyhost' => apply_filters('https_ssl_verify', $r['sslverify']) 
     1083            ) 
    10631084        ); 
    10641085 
     
    11541175 
    11551176        $handle = curl_init(); 
     1177 
    11561178        curl_setopt( $handle, CURLOPT_URL, $url); 
    1157  
    1158         // The cURL extension requires that the option be set for the HEAD to 
    1159         // work properly. 
    1160         if ( 'HEAD' === $r['method'] ) { 
    1161             curl_setopt( $handle, CURLOPT_NOBODY, true ); 
    1162         } 
    1163  
    1164         if ( true === $r['blocking'] ) { 
    1165             curl_setopt( $handle, CURLOPT_HEADER, true ); 
    1166             curl_setopt( $handle, CURLOPT_RETURNTRANSFER, 1 ); 
    1167         } else { 
    1168             curl_setopt( $handle, CURLOPT_HEADER, false ); 
    1169             curl_setopt( $handle, CURLOPT_NOBODY, true ); 
    1170             curl_setopt( $handle, CURLOPT_RETURNTRANSFER, 0 ); 
    1171         } 
    1172  
     1179        curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true ); 
     1180        curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, apply_filters('https_ssl_verify', $r['sslverify']) ); 
     1181        curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, apply_filters('https_ssl_verify', $r['sslverify']) ); 
    11731182        curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] ); 
    1174         curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, 1 ); 
     1183        curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $r['timeout'] ); 
    11751184        curl_setopt( $handle, CURLOPT_TIMEOUT, $r['timeout'] ); 
    11761185        curl_setopt( $handle, CURLOPT_MAXREDIRS, $r['redirection'] ); 
     1186 
     1187        switch ( $r['method'] ) { 
     1188            case 'HEAD': 
     1189                curl_setopt( $handle, CURLOPT_NOBODY, true ); 
     1190                break; 
     1191            case 'POST': 
     1192                curl_setopt( $handle, CURLOPT_POST, true ); 
     1193                curl_setopt( $handle, CURLOPT_POSTFIELDS, $r['body'] ); 
     1194                break; 
     1195        } 
     1196 
     1197        if ( true === $r['blocking'] ) 
     1198            curl_setopt( $handle, CURLOPT_HEADER, true ); 
     1199        else 
     1200            curl_setopt( $handle, CURLOPT_HEADER, false ); 
    11771201 
    11781202        // The option doesn't work with safe mode or when open_basedir is set. 
  • trunk/wp-includes/rewrite.php

    r10464 r10507  
    15971597     */ 
    15981598    function wp_rewrite_rules() { 
    1599         $this->rules = get_option('rewrite_rules'); 
     1599        $this->rules = get_transient('rewrite_rules'); 
    16001600        if ( empty($this->rules) ) { 
    16011601            $this->matches = 'matches'; 
    16021602            $this->rewrite_rules(); 
    1603             update_option('rewrite_rules', $this->rules); 
     1603            set_transient('rewrite_rules', $this->rules); 
    16041604        } 
    16051605 
     
    17841784     */ 
    17851785    function flush_rules() { 
    1786         delete_option('rewrite_rules'); 
     1786        delete_transient('rewrite_rules'); 
    17871787        $this->wp_rewrite_rules(); 
    17881788        if ( function_exists('save_mod_rewrite_rules') ) 
  • trunk/wp-includes/rss.php

    r10150 r10507  
    715715        $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; 
    716716 
    717         // shouldn't these be using get_option() ? 
    718         if ( !$wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM $wpdb->options WHERE option_name = %s", $cache_option ) ) ) 
    719             add_option($cache_option, '', '', 'no'); 
    720         if ( !$wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM $wpdb->options WHERE option_name = %s", $cache_timestamp ) ) ) 
    721             add_option($cache_timestamp, '', '', 'no'); 
    722  
    723         update_option($cache_option, $rss); 
    724         update_option($cache_timestamp, time() ); 
     717        set_transient($cache_option, $rss); 
     718        set_transient($cache_timestamp, time() ); 
    725719 
    726720        return $cache_option; 
     
    737731        $cache_option = 'rss_' . $this->file_name( $url ); 
    738732 
    739         if ( ! get_option( $cache_option ) ) { 
     733        if ( ! $rss = get_transient( $cache_option ) ) { 
    740734            $this->debug( 
    741735                "Cache doesn't contain: $url (cache option: $cache_option)" 
     
    743737            return 0; 
    744738        } 
    745  
    746         $rss = get_option( $cache_option ); 
    747739 
    748740        return $rss; 
     
    761753        $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; 
    762754 
    763         if ( $mtime = get_option($cache_timestamp) ) { 
     755        if ( $mtime = get_transient($cache_timestamp) ) { 
    764756            // find how long ago the file was added to the cache 
    765757            // and whether that is longer then MAX_AGE 
  • trunk/wp-settings.php

    r10443 r10507  
    258258    wp_die(/*WP_I18N_BAD_PREFIX*/'<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores.'/*/WP_I18N_BAD_PREFIX*/); 
    259259 
    260 if ( file_exists(WP_CONTENT_DIR . '/object-cache.php') ) 
     260if ( file_exists(WP_CONTENT_DIR . '/object-cache.php') ) { 
    261261    require_once (WP_CONTENT_DIR . '/object-cache.php'); 
    262 else 
     262    $_wp_using_ext_object_cache = true; 
     263} else { 
    263264    require_once (ABSPATH . WPINC . '/cache.php'); 
     265    $_wp_using_ext_object_cache = false; 
     266} 
    264267 
    265268wp_cache_init(); 
Note: See TracChangeset for help on using the changeset viewer.