78 public function __construct($uploadDir, $allowedMimeTypes, $maxFileSize=0, $maxWidth=
null, $maxHeight=
null)
80 @$this->extensionToMime = include(XOOPS_ROOT_PATH .
'/class/mimetypes.inc.php');
81 if (!is_array($this->extensionToMime)) {
82 $this->extensionToMime = [];
85 if (is_array($allowedMimeTypes)) {
86 $this->allowedMimeTypes =& $allowedMimeTypes;
88 $this->uploadDir = $uploadDir;
89 $this->maxFileSize = (int)$maxFileSize;
90 if (isset($maxWidth)) {
91 $this->maxWidth = (int)$maxWidth;
93 if (isset($maxHeight)) {
94 $this->maxHeight = (int)$maxHeight;
97 $this->_strictCheckExtensions = [
98 'gif' =>XCUBE_IMAGETYPE_ENUM_GIF,
99 'jpg' =>XCUBE_IMAGETYPE_ENUM_JPG,
100 'jpeg' =>XCUBE_IMAGETYPE_ENUM_JPG,
101 'png' =>XCUBE_IMAGETYPE_ENUM_PNG,
102 'bmp' =>XCUBE_IMAGETYPE_ENUM_BMP
125 if (empty($this->extensionToMime)) {
126 $this->
setErrors(
'Error loading mimetypes definition');
129 if (!isset($_FILES[$media_name])) {
134 if (is_array($_FILES[$media_name][
'name']) && isset($index)) {
135 $index = (int)$index;
136 $this->mediaName = $_FILES[$media_name][
'name'][$index];
137 $this->mediaType = $_FILES[$media_name][
'type'][$index];
138 $this->mediaSize = $_FILES[$media_name][
'size'][$index];
139 $this->mediaTmpName = $_FILES[$media_name][
'tmp_name'][$index];
140 $this->mediaError = !empty($_FILES[$media_name][
'error'][$index]) ? $_FILES[$media_name][
'errir'][$index] : 0;
142 $media_name =& $_FILES[$media_name];
143 $this->mediaName = $media_name[
'name'];
144 $this->mediaName = $media_name[
'name'];
145 $this->mediaType = $media_name[
'type'];
146 $this->mediaSize = $media_name[
'size'];
147 $this->mediaTmpName = $media_name[
'tmp_name'];
148 $this->mediaError = !empty($media_name[
'error']) ? $media_name[
'error'] : 0;
150 if (
false !== ($ext = strrpos($this->mediaName,
'.'))) {
151 $this->ext = strtolower(substr($this->mediaName, $ext + 1));
152 if (isset($this->extensionToMime[$this->ext])) {
153 $this->mediaRealType = $this->extensionToMime[$this->ext];
161 if ((
int)$this->mediaSize < 0) {
165 if (
'' == $this->mediaName) {
169 if (
'none' === $this->mediaTmpName || !is_uploaded_file($this->mediaTmpName)) {
173 if ($this->mediaError > 0) {
174 $this->
setErrors(
'Error occurred: Error #'.$this->mediaError);
308 if (isset($this->targetFileName)) {
309 $this->savedFileName = $this->targetFileName;
310 } elseif (isset($this->prefix)) {
311 $this->savedFileName = uniqid($this->prefix,
true).
'.'.strtolower($this->ext);
313 $this->savedFileName = strtolower($this->mediaName);
315 $this->savedDestination = $this->uploadDir.
'/'.$this->savedFileName;
316 if (!move_uploaded_file($this->mediaTmpName, $this->savedDestination)) {
319 @chmod($this->savedDestination, $chmod);
340 if (!isset($this->maxWidth)) {
343 if (
false !== $dimension = getimagesize($this->mediaTmpName)) {
344 if ($dimension[0] > $this->maxWidth) {
348 trigger_error(sprintf(
'Failed fetching image size of %s, skipping max width check..', $this->mediaTmpName), E_USER_WARNING);
360 if (!isset($this->maxHeight)) {
363 if (
false !== $dimension = getimagesize($this->mediaTmpName)) {
364 if ($dimension[1] > $this->maxHeight) {
368 trigger_error(sprintf(
'Failed fetching image size of %s, skipping max height check..', $this->mediaTmpName), E_USER_WARNING);
380 if (!empty($this->allowedExtensions)) {
381 if (!in_array($this->ext, $this->allowedExtensions)) {
382 $this->
setErrors(
'File extension not allowed');
389 if (!empty($this->allowedMimeTypes)&& !in_array($this->mediaType, $this->allowedMimeTypes,
true)) {
390 $this->
setErrors(
'Unexpected MIME Type');
396 if (empty($this->mediaRealType) && !$this->allowUnknownTypes) {
399 if (!empty($this->allowedMimeTypes)&& !in_array($this->mediaRealType, $this->allowedMimeTypes,
true)) {
400 $this->
setErrors(
'Unexpected MIME Type');
406 if (isset($this->_strictCheckExtensions[$this->ext])) {
407 return $this->_checkStrict();