PluginProbe
User Access Manager / 2.0.5
User Access Manager v2.0.5
2.3.20 2.3.19 2.3.18 2.3.17 2.3.16 2.3.15 2.3.14 2.3.13 trunk 0.6 0.6.1 0.6.2 0.7 0.7 Beta 0.7.0.1 0.8 0.8.0.1 0.8.0.2 0.9 0.9.1 0.9.1.1 0.9.1.2 0.9.1.3 0.9.1.4 1.0 All 136 releases
user-access-manager / src / UserAccessManager / FileHandler / FileHandler.php

FileHandler.php in User Access Manager 2.0.5, at src/UserAccessManager/FileHandler/FileHandler.php

196 lines 5.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * FileHandler.php
4 *
5 * The FileHandler class file.
6 *
7 * PHP versions 5
8 *
9 * @author Alexander Schneider <alexanderschneider85@gmail.com>
10 * @copyright 2008-2017 Alexander Schneider
11 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2
12 * @version SVN: $id$
13 * @link http://wordpress.org/extend/plugins/user-access-manager/
14 */
15 namespace UserAccessManager\FileHandler;
16
17 use UserAccessManager\Config\Config;
18 use UserAccessManager\Wrapper\Php;
19 use UserAccessManager\Wrapper\Wordpress;
20
21 /**
22 * Class FileHandler
23 *
24 * @package UserAccessManager\FileHandler
25 */
26 class FileHandler
27 {
28 /**
29 * @var Php
30 */
31 private $php;
32
33 /**
34 * @var Wordpress
35 */
36 private $wordpress;
37
38 /**
39 * @var Config
40 */
41 private $config;
42
43 /**
44 * @var FileProtectionFactory
45 */
46 private $fileProtectionFactory;
47
48 /**
49 * FileHandler constructor.
50 *
51 * @param Php $php
52 * @param Wordpress $wordpress
53 * @param Config $config
54 * @param FileProtectionFactory $fileProtectionFactory
55 */
56 public function __construct(
57 Php $php,
58 Wordpress $wordpress,
59 Config $config,
60 FileProtectionFactory $fileProtectionFactory
61 ) {
62 $this->php = $php;
63 $this->wordpress = $wordpress;
64 $this->config = $config;
65 $this->fileProtectionFactory = $fileProtectionFactory;
66 }
67
68 /**
69 * Clears the buffer.
70 */
71 private function clearBuffer()
72 {
73 //TODO find better solution (prevent '\n' / '0A')
74 if (is_numeric(ob_get_length()) === true) {
75 ob_clean();
76 }
77
78 flush();
79 }
80
81 /**
82 * Delivers the content of the requested file.
83 *
84 * @param string $file
85 * @param bool $isImage
86 */
87 public function getFile($file, $isImage)
88 {
89 //Deliver content
90 if (file_exists($file) === true) {
91 $fileName = basename($file);
92
93 /*
94 * This only for compatibility
95 * mime_content_type has been deprecated as the PECL extension file info
96 * provides the same functionality (and more) in a much cleaner way.
97 */
98 $explodedFileName = explode('.', $fileName);
99 $lastElement = array_pop($explodedFileName);
100 $fileExt = strtolower($lastElement);
101
102 $mimeTypes = $this->config->getMimeTypes();
103
104 if ($this->php->functionExists('finfo_open') === true) {
105 $fileInfo = finfo_open(FILEINFO_MIME);
106 $fileMimeType = finfo_file($fileInfo, $file);
107 finfo_close($fileInfo);
108 } elseif ($this->php->functionExists('mime_content_type')) {
109 $fileMimeType = mime_content_type($file);
110 } elseif (isset($mimeTypes[$fileExt]) === true) {
111 $fileMimeType = $mimeTypes[$fileExt];
112 } else {
113 $fileMimeType = 'application/octet-stream';
114 }
115
116 header('Content-Description: File Transfer');
117 header('Content-Type: '.$fileMimeType);
118
119 if ($isImage === false) {
120 $baseName = str_replace(' ', '_', basename($file));
121 header('Content-Disposition: attachment; filename="'.$baseName.'"');
122 }
123
124 header('Content-Transfer-Encoding: binary');
125 header('Content-Length: '.filesize($file));
126 $this->clearBuffer();
127
128 if ($this->config->getDownloadType() === 'fopen'
129 && $isImage === false
130 ) {
131 $handler = fopen($file, 'r');
132
133 while (feof($handler) === false) {
134 if ($this->php->iniGet('safe_mode') !== '') {
135 $this->php->setTimeLimit(30);
136 }
137
138 echo $this->php->fread($handler, 1024);
139 }
140 } else {
141 readfile($file);
142 }
143
144 $this->php->callExit();
145 } else {
146 $this->wordpress->wpDie(TXT_UAM_FILE_NOT_FOUND_ERROR);
147 }
148 }
149
150 /**
151 * Creates a protection file.
152 *
153 * @param string $dir The destination directory.
154 * @param string $objectType The object type.
155 *
156 * @return false
157 */
158 public function createFileProtection($dir = null, $objectType = null)
159 {
160 $dir = ($dir === null) ? $this->config->getUploadDirectory() : $dir;
161
162 if ($dir !== null) {
163 if ($this->wordpress->isNginx() === true) {
164 return $this->fileProtectionFactory->createNginxFileProtection()->create($dir, $objectType);
165 } else {
166 return $this->fileProtectionFactory->createApacheFileProtection()->create($dir, $objectType);
167 }
168 }
169
170 return false;
171 }
172
173
174 /**
175 * Deletes the protection files.
176 *
177 * @param string $dir The destination directory.
178 *
179 * @return false
180 */
181 public function deleteFileProtection($dir = null)
182 {
183 $dir = ($dir === null) ? $this->config->getUploadDirectory() : $dir;
184
185 if ($dir !== null) {
186 if ($this->wordpress->isNginx() === true) {
187 return $this->fileProtectionFactory->createNginxFileProtection()->delete($dir);
188 } else {
189 return $this->fileProtectionFactory->createApacheFileProtection()->delete($dir);
190 }
191 }
192
193 return false;
194 }
195 }
196