WordPress.org

Make WordPress Core

Ticket #16236: 16236.2.diff

File 16236.2.diff, 6.2 KB (added by sivel, 3 years ago)
  • wp-includes/class-http.php

     
    227227                        'body' => null, 
    228228                        'compress' => false, 
    229229                        'decompress' => true, 
    230                         'sslverify' => true 
     230                        'sslverify' => true, 
     231                        'stream' => false, 
     232                        'filename' => null 
    231233                ); 
    232234 
    233235                $r = wp_parse_args( $args, $defaults ); 
     
    255257                $r['local'] = $homeURL['host'] == $arrURL['host'] || 'localhost' == $arrURL['host']; 
    256258                unset( $homeURL ); 
    257259 
     260                if ( $r['stream']  && ! $r['filename'] ) 
     261                        $r['filename'] = get_temp_dir() . basename( $url ); 
     262 
     263                if ( $r['stream'] ) { 
     264                        $r['blocking'] = true; 
     265                        if ( ! is_dir( dirname( $r['filename'] ) ) || ! is_writable( dirname( $r['filename'] ) ) ) 
     266                                return new WP_Error( 'http_request_failed', __( 'Destination directory for file streaming does not exist or is not writable.' ) ); 
     267                } 
     268 
    258269                if ( is_null( $r['headers'] ) ) 
    259270                        $r['headers'] = array(); 
    260271 
     
    12911302 */ 
    12921303class WP_Http_Curl { 
    12931304 
     1305        private $headers; 
     1306 
    12941307        /** 
    12951308         * Send a HTTP request to a URI using cURL extension. 
    12961309         * 
     
    13871400                else 
    13881401                        curl_setopt( $handle, CURLOPT_HEADER, false ); 
    13891402 
     1403                if ( $r['stream'] ) { 
     1404                        $stream_handle = fopen( $r['filename'], 'w+' ); 
     1405                        curl_setopt( $handle, CURLOPT_FILE, $stream_handle ); 
     1406                        curl_setopt( $handle, CURLOPT_HEADERFUNCTION, array( &$this, 'stream_headers' ) ); 
     1407                } 
     1408 
    13901409                // The option doesn't work with safe mode or when open_basedir is set. 
    13911410                // Disable HEAD when making HEAD requests. 
    13921411                if ( !ini_get('safe_mode') && !ini_get('open_basedir') && 'HEAD' != $r['method'] ) 
     
    14201439                $theResponse = curl_exec( $handle ); 
    14211440 
    14221441                if ( !empty($theResponse) ) { 
    1423                         $headerLength = curl_getinfo($handle, CURLINFO_HEADER_SIZE); 
    1424                         $theHeaders = trim( substr($theResponse, 0, $headerLength) ); 
    1425                         if ( strlen($theResponse) > $headerLength ) 
    1426                                 $theBody = substr( $theResponse, $headerLength ); 
    1427                         else 
     1442                        if ( ! empty( $this->headers ) ) { 
     1443                                $theHeaders = $this->headers; 
    14281444                                $theBody = ''; 
    1429                         if ( false !== strpos($theHeaders, "\r\n\r\n") ) { 
    1430                                 $headerParts = explode("\r\n\r\n", $theHeaders); 
    1431                                 $theHeaders = $headerParts[ count($headerParts) -1 ]; 
     1445                        } else { 
     1446                                $headerLength = curl_getinfo($handle, CURLINFO_HEADER_SIZE); 
     1447                                $theHeaders = trim( substr($theResponse, 0, $headerLength) ); 
     1448                                if ( strlen($theResponse) > $headerLength ) 
     1449                                        $theBody = substr( $theResponse, $headerLength ); 
     1450                                else 
     1451                                        $theBody = ''; 
     1452                                if ( false !== strpos($theHeaders, "\r\n\r\n") ) { 
     1453                                        $headerParts = explode("\r\n\r\n", $theHeaders); 
     1454                                        $theHeaders = $headerParts[ count($headerParts) - 1 ]; 
     1455                                } 
    14321456                        } 
    14331457                        $theHeaders = WP_Http::processHeaders($theHeaders); 
    14341458                } else { 
     
    14591483                if ( true === $r['decompress'] && true === WP_Http_Encoding::should_decode($theHeaders['headers']) ) 
    14601484                        $theBody = WP_Http_Encoding::decompress( $theBody ); 
    14611485 
    1462                 return array('headers' => $theHeaders['headers'], 'body' => $theBody, 'response' => $response, 'cookies' => $theHeaders['cookies']); 
     1486                return array('headers' => $theHeaders['headers'], 'body' => $theBody, 'response' => $response, 'cookies' => $theHeaders['cookies'], 'filename' => $r['filename']); 
    14631487        } 
    14641488 
     1489        function stream_headers( $handle, $headers ) { 
     1490                $this->headers .= $headers; 
     1491                return strlen($headers); 
     1492        } 
     1493 
    14651494        /** 
    14661495         * Whether this class can be used for retrieving an URL. 
    14671496         * 
  • wp-includes/functions.php

     
    21112111} 
    21122112 
    21132113/** 
     2114 * Determines a writable directory for temporary files. 
     2115 * Function's preference is to WP_CONTENT_DIR followed by the return value of <code>sys_get_temp_dir()</code>, before finally defaulting to /tmp/ 
     2116 * 
     2117 * In the event that this function does not find a writable location, It may be overridden by the <code>WP_TEMP_DIR</code> constant in your <code>wp-config.php</code> file. 
     2118 * 
     2119 * @since 2.5.0 
     2120 * 
     2121 * @return string Writable temporary directory 
     2122 */ 
     2123function get_temp_dir() { 
     2124        static $temp; 
     2125        if ( defined('WP_TEMP_DIR') ) 
     2126                return trailingslashit(WP_TEMP_DIR); 
     2127 
     2128        if ( $temp ) 
     2129                return trailingslashit($temp); 
     2130 
     2131        $temp = WP_CONTENT_DIR . '/'; 
     2132        if ( is_dir($temp) && @is_writable($temp) ) 
     2133                return $temp; 
     2134 
     2135        if  ( function_exists('sys_get_temp_dir') ) { 
     2136                $temp = sys_get_temp_dir(); 
     2137                if ( @is_writable($temp) ) 
     2138                        return trailingslashit($temp); 
     2139        } 
     2140 
     2141        $temp = ini_get('upload_tmp_dir'); 
     2142        if ( is_dir($temp) && @is_writable($temp) ) 
     2143                return trailingslashit($temp); 
     2144 
     2145        $temp = '/tmp/'; 
     2146        return $temp; 
     2147} 
     2148 
     2149/** 
    21142150 * Get an array containing the current upload directory's path and url. 
    21152151 * 
    21162152 * Checks the 'upload_path' option, which should be from the web root folder, 
  • wp-admin/includes/file.php

     
    153153} 
    154154 
    155155/** 
    156  * Determines a writable directory for temporary files. 
    157  * Function's preference is to WP_CONTENT_DIR followed by the return value of <code>sys_get_temp_dir()</code>, before finally defaulting to /tmp/ 
    158  * 
    159  * In the event that this function does not find a writable location, It may be overridden by the <code>WP_TEMP_DIR</code> constant in your <code>wp-config.php</code> file. 
    160  * 
    161  * @since 2.5.0 
    162  * 
    163  * @return string Writable temporary directory 
    164  */ 
    165 function get_temp_dir() { 
    166         static $temp; 
    167         if ( defined('WP_TEMP_DIR') ) 
    168                 return trailingslashit(WP_TEMP_DIR); 
    169  
    170         if ( $temp ) 
    171                 return trailingslashit($temp); 
    172  
    173         $temp = WP_CONTENT_DIR . '/'; 
    174         if ( is_dir($temp) && @is_writable($temp) ) 
    175                 return $temp; 
    176  
    177         if  ( function_exists('sys_get_temp_dir') ) { 
    178                 $temp = sys_get_temp_dir(); 
    179                 if ( @is_writable($temp) ) 
    180                         return trailingslashit($temp); 
    181         } 
    182  
    183         $temp = ini_get('upload_tmp_dir'); 
    184         if ( is_dir($temp) && @is_writable($temp) ) 
    185                 return trailingslashit($temp); 
    186  
    187         $temp = '/tmp/'; 
    188         return $temp; 
    189 } 
    190  
    191 /** 
    192156 * Returns a filename of a Temporary unique file. 
    193157 * Please note that the calling function must unlink() this itself. 
    194158 *