-
Notifications
You must be signed in to change notification settings - Fork 172
/
Copy pathHttpAsset.php
84 lines (72 loc) · 2.37 KB
/
HttpAsset.php
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
80
81
82
83
84
<?php namespace October\Rain\Assetic\Asset;
use October\Rain\Assetic\Filter\FilterInterface;
use October\Rain\Assetic\Util\VarUtils;
use InvalidArgumentException;
use RuntimeException;
/**
* HttpAsset represents an asset loaded via an HTTP request.
*
* @author Kris Wallsmith <[email protected]>
*/
class HttpAsset extends BaseAsset
{
/**
* @var mixed sourceUrl
*/
protected $sourceUrl;
/**
* @var mixed ignoreErrors
*/
protected $ignoreErrors;
/**
* __construct.
*
* @param string $sourceUrl The source URL
* @param array $filters An array of filters
* @param bool $ignoreErrors
* @param array $vars
*
* @throws InvalidArgumentException If the first argument is not an URL
*/
public function __construct($sourceUrl, $filters = [], $ignoreErrors = false, array $vars = array())
{
if (strpos($sourceUrl, '//') === 0) {
$sourceUrl = 'http:'.$sourceUrl;
}
elseif (strpos($sourceUrl, '://') === false) {
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);
}
/**
* load
*/
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);
}
/**
* getLastModified
*/
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 (stripos($header, 'Last-Modified: ') === 0) {
list(, $mtime) = explode(':', $header, 2);
return strtotime(trim($mtime));
}
}
}
}
}