Класс Upload
Объект $Field:
Объект «Поле: загрузка файла»
Исходный код
class Upload extends Base { … }
Свойства
$extensions
$Upload->extensions = '~\\.(\\w+)\\$~i';
Исходный код
var $extensions = '~\\.(\\w+)\\$~i';
$upload_error
$Upload->upload_error
Исходный код
var $upload_error;
Методы
request()
$Upload->request();
Получение значения поля
Исходный код
function request() {
$root = $this->root();
$Main = $this->Main();
$name = $this->name;
if (!strlen($name)) return;
if ($Page = $this->Page()) $this->value = $Page->get($name);
if ($_POST || $_FILES) {
if ($_FILE = $_FILES[$this->name]) {
if ($_FILE['error'] == 0) {
if (!preg_match($this->extensions, $_FILE['name'], $m) || strpos($_FILE['name'], '.php') !== false) {
$this->upload_error = 'Недопустимый тип файла';
} else {
$folder = '/upload';
if (!is_dir("$root$folder")) {
@mkdir("$root$folder");
@chmod("$root$folder", 0777);
}
$tmp = $folder . '/' . sha1(uniqid(microtime()));
if (@move_uploaded_file($_FILE['tmp_name'], $root . $tmp)) {
@chmod("$root$tmp", 0666);
if ($a = @getimagesize($root . $tmp)) {
switch ($a[2]) {
case IMAGETYPE_JPEG: $m[1] = 'jpg'; break;
case IMAGETYPE_GIF: $m[1] = 'gif'; break;
case IMAGETYPE_PNG: $m[1] = 'png'; break;
}
}
$value = $folder . '/' . sha1_file($root . $tmp) . '.' . $m[1];
if (!file_exists($root . $value)) {
if (@rename($root . $tmp, $root . $value)) {
$this->value = $value;
} else {
@unlink($root . $tmp);
$this->upload_error = 'Ошибка загрузки файла';
}
} else {
@touch($root . $value);
$this->value = $value;
}
} else {
$this->upload_error = 'Ошибка загрузки файла';
}
}
} elseif ($_FILE['error'] !== 4) {
$this->upload_error = 'Размер файла превышает допустимое значение';
}
}
} elseif (!isset($this->value) && isset($this->default)) {
$this->value = $this->default;
}
}
cleanup()
$Upload->cleanup();
Исходный код
function cleanup() {
$root = $this->root();
if (strlen($this->value) && strpos('/' . $this->value . '/', '/../') === false && strpos($this->value, '.php') === false) {
if (substr($this->value, 0, 8) === '/upload/') @unlink("$root{$this->value}");
else @unlink($root . '/upload' . $this->value);
}
}
check()
$Upload->check();
Проверка правильности ввода
Возвращает: string|null
null
– успешная проверка;
string
– ошибка
Исходный код
function check() {
if ($this->upload_error) return $this->error = $this->upload_error;
if (!empty($e = parent::check())) return $e;
}
text()
$Upload->text();
Исходный код
function text() {
if ($value = $this->value) {
$this->value = $this->Main()->Request()->absoluteUrl($value);
$r = parent::text();
$this->value = $value;
} else {
$r = parent::text();
}
return $r;
}
html()
$Upload->html();
Исходный код
function html() {
if ($value = $this->value) {
$this->value = $this->Main()->Request()->absoluteUrl($value);
$r = parent::html();
$this->value = $value;
} else {
$r = parent::html();
}
return $r;
}