Blame view

sources/3rdparty/kriswallsmith/assetic/src/Assetic/Asset/HttpAsset.php 2.35 KB
6d9380f96   Cédric Dupont   Update sources OC...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  <?php
  
  /*
   * This file is part of the Assetic package, an OpenSky project.
   *
   * (c) 2010-2014 OpenSky Project Inc
   *
   * For the full copyright and license information, please view the LICENSE
   * file that was distributed with this source code.
   */
  
  namespace Assetic\Asset;
  
  use Assetic\Filter\FilterInterface;
  use Assetic\Util\VarUtils;
  
  /**
   * Represents an asset loaded via an HTTP request.
   *
   * @author Kris Wallsmith <kris.wallsmith@gmail.com>
   */
  class HttpAsset extends BaseAsset
  {
      private $sourceUrl;
      private $ignoreErrors;
  
      /**
       * Constructor.
       *
       * @param string  $sourceUrl    The source URL
       * @param array   $filters      An array of filters
       * @param Boolean $ignoreErrors
       * @param array   $vars
       *
       * @throws \InvalidArgumentException If the first argument is not an URL
       */
      public function __construct($sourceUrl, $filters = array(), $ignoreErrors = false, array $vars = array())
      {
          if (0 === strpos($sourceUrl, '//')) {
              $sourceUrl = 'http:'.$sourceUrl;
          } elseif (false === strpos($sourceUrl, '://')) {
              throw new \InvalidArgumentException(sprintf('"%s" is not a valid URL.', $sourceUrl));
          }
  
          $this->sourceUrl = $sourceUrl;
          $this->ignoreErrors = $ignoreErrors;
  
          list($scheme, $url) = explode('://', $sourceUrl, 2);
          list($host, $path) = explode('/', $url, 2);
  
          parent::__construct($filters, $scheme.'://'.$host, $path, $vars);
      }
  
      public function load(FilterInterface $additionalFilter = null)
      {
          $content = @file_get_contents(
              VarUtils::resolve($this->sourceUrl, $this->getVars(), $this->getValues())
          );
  
          if (false === $content && !$this->ignoreErrors) {
              throw new \RuntimeException(sprintf('Unable to load asset from URL "%s"', $this->sourceUrl));
          }
  
          $this->doLoad($content, $additionalFilter);
      }
  
      public function getLastModified()
      {
          if (false !== @file_get_contents($this->sourceUrl, false, stream_context_create(array('http' => array('method' => 'HEAD'))))) {
              foreach ($http_response_header as $header) {
                  if (0 === stripos($header, 'Last-Modified: ')) {
                      list(, $mtime) = explode(':', $header, 2);
  
                      return strtotime(trim($mtime));
                  }
              }
          }
      }
  }