Пример #1
0
 /**
  * Efficiently Download a file through HTTP.  Returns downloaded file as a string in-memory
  * This is best used for small files
  *
  * If an HTTP proxy has been configured (http_proxy Pyrus\Config
  * setting), the proxy will be used.
  *
  * @param string             $url          the URL to download
  * @param false|string|array $lastmodified header values to check against
  *                                         for caching use false to return
  *                                         the header values from this download
  * @param false|array        $accept       Accept headers to send
  *
  * @return string|array  Returns the contents of the downloaded file or a PEAR
  *                       error on failure.  If the error is caused by
  *                       socket-related errors, the error object will
  *                       have the fsockopen error code available through
  *                       getCode().  If caching is requested, then return the header
  *                       values.
  *
  * @throws Pyrus\REST\Exception if the url is invalid
  * @access public
  */
 function downloadHttp($url, $lastmodified = null, $accept = false)
 {
     $info = parse_url($url);
     if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
         throw new REST\Exception('Cannot download non-http URL "' . $url . '"');
     }
     if (!isset($info['host'])) {
         throw new REST\Exception('Cannot download from non-URL "' . $url . '"');
     }
     $response = Main::download($url);
     if ($response->code == 304 && ($lastmodified || $lastmodified === false)) {
         return false;
     }
     if (isset($response->headers['content-length'])) {
         $length = $response->headers['content-length'];
     } else {
         $length = -1;
     }
     $data = $response->body;
     if ($lastmodified === false || $lastmodified) {
         if (isset($response->headers['etag'])) {
             $lastmodified = array('ETag' => $response->headers['etag']);
         }
         if (isset($response->headers['last-modified'])) {
             if (is_array($lastmodified)) {
                 $lastmodified['Last-Modified'] = $response->headers['last-modified'];
             } else {
                 $lastmodified = $response->headers['last-modified'];
             }
         }
         return array($data, $lastmodified, $response->headers);
     }
     return $data;
 }
Пример #2
0
 /**
  * Attempts to get the xml from the URL specified.
  *
  * @param string $xml_url URL to the channel xml http://pear.php.net/channel.xml
  *
  * @return string Channel XML
  */
 protected function _fromURL($xml_url)
 {
     $response = Main::download($xml_url);
     return $response->body;
 }