forked from magento/magento2
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathget.php
executable file
·81 lines (72 loc) · 2.66 KB
/
get.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
<?php
/**
* Public media files entry point
*
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
use Magento\Framework\App\Cache\Frontend\Factory;
use Magento\Framework\App\ObjectManagerFactory;
require dirname(__DIR__) . '/app/bootstrap.php';
$mediaDirectory = null;
$allowedResources = [];
$configCacheFile = dirname(__DIR__) . '/var/resource_config.json';
$relativeFilename = null;
$isAllowed = function ($resource, array $allowedResources) {
$isResourceAllowed = false;
foreach ($allowedResources as $allowedResource) {
if (0 === stripos($resource, $allowedResource)) {
$isResourceAllowed = true;
}
}
return $isResourceAllowed;
};
if (file_exists($configCacheFile) && is_readable($configCacheFile)) {
$config = json_decode(file_get_contents($configCacheFile), true);
//checking update time
if (filemtime($configCacheFile) + $config['update_time'] > time()) {
$mediaDirectory = trim(str_replace(__DIR__, '', $config['media_directory']), '/');
$allowedResources = array_merge($allowedResources, $config['allowed_resources']);
}
}
// Serve file if it's materialized
$request = new \Magento\MediaStorage\Model\File\Storage\Request(__DIR__);
if ($mediaDirectory) {
if (0 !== stripos($request->getPathInfo(), $mediaDirectory . '/') || is_dir($request->getFilePath())) {
header('HTTP/1.0 404 Not Found');
exit;
}
$relativeFilename = str_replace($mediaDirectory . '/', '', $request->getPathInfo());
if (!$isAllowed($relativeFilename, $allowedResources)) {
header('HTTP/1.0 404 Not Found');
exit;
}
if (is_readable($request->getFilePath())) {
$transfer = new \Magento\Framework\File\Transfer\Adapter\Http(
new \Magento\Framework\HTTP\PhpEnvironment\Response(),
new \Magento\Framework\File\Mime()
);
$transfer->send($request->getFilePath());
exit;
}
}
// Materialize file in application
$params = $_SERVER;
if (empty($mediaDirectory)) {
$params[ObjectManagerFactory::INIT_PARAM_DEPLOYMENT_CONFIG] = [];
$params[Factory::PARAM_CACHE_FORCED_OPTIONS] = ['frontend_options' => ['disable_save' => true]];
}
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
/** @var \Magento\MediaStorage\App\Media $app */
$app = $bootstrap->createApplication(
'Magento\MediaStorage\App\Media',
[
'request' => $request,
'workingDirectory' => __DIR__,
'mediaDirectory' => $mediaDirectory,
'configCacheFile' => $configCacheFile,
'isAllowed' => $isAllowed,
'relativeFileName' => $relativeFilename,
]
);
$bootstrap->run($app);